Как добавить виды в план в отдельных файлах - PullRequest
0 голосов
/ 22 мая 2019

У меня огромное приложение, которому сложно обновлять свои представления.Чтобы исправить это, я разделил представления на несколько файлов, используя blueprints .Проблема в том, что чертежи также становятся очень большими, потому что длинная документация, которая есть у каждого представления, и различные проверки, необходимые для каждого представления.

Я пытался сделать import следующим образом:

Import

Где у меня есть основной файл, содержащий приложение Flask (которое импортирует чертеж), файл, содержащий проект, и файл, который импортирует проект и настраивает представления в нем.Проблема заключается в том, что при таком подходе представления не визуализируются из-за потоковых причин.

Основной файл в корне папки:

from flask import Flask

from source import test

application = Flask(__name__)

application.register_blueprint(test)

application.run()

Файл чертежа внутри подпапкив корневой папке:

from flask import Blueprint

test = Blueprint('test', __name__)

Файл представления внутри той же подпапки, что и файл чертежа:

from .test import test

@test.route('/home', methods=['GET', 'POST'])
def home():
    return 'home'

Я также пытался добавить декоратор чертежа к объявленной функции,таким образом, представления добавляются к проекту в файле проекта, но я не думаю, что это хороший или масштабируемый подход - и он не сработал ^ - ^.

Я ожидаю создатьпроект в файле, импортируйте проект в другие файлы и добавьте представления в проект, а затем импортируйте проект и добавьте его в приложение Flask.

Ответы [ 3 ]

1 голос
/ 22 мая 2019

Вам необходимо импортировать содержимое views в файл blueprint.

Я создал сценарий и смог получить view. Кроме того, я обновил соглашение об именах.

Структура папок:

.
├── app.py
└── blueprints
    ├── example_blueprint.py
    ├── example_views.py
    └── __init__.py

app.py:

from flask import Flask
from blueprints.example_blueprint import bp

app = Flask(__name__)
app.register_blueprint(bp)

blueprints/example_blueprint.py:

from flask import Blueprint

bp = Blueprint('bp', __name__,
                        template_folder='templates')

from .example_views import *

blueprints/example_views.py:

from .example_blueprint import bp

@bp.route('/home', methods=['GET', 'POST'])
def home():
    return 'home'

blueprints/__init__.py: пустой файл

Выход:

blueprint example

Запуск приложения:

export FLASK_APP=app.py
export FLASK_ENV=development
flask run

requirements.txt

Click==7.0
Flask==1.0.3
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
pkg-resources==0.0.0
Werkzeug==0.15.4

Справка:

1 голос
/ 22 мая 2019

Модуль просмотра не обнаружен, поскольку импортируется только объект Blueprint.

Из организации вашего Blueprint и, в частности, из импорта, которым вы поделились в своем основном файле, я могу вычесть существование __ init __. Py в папке blueprint, которая экспортирует объект blueprint.

При импорте представлений в этом файле приложение должно обнаружить виды, зарегистрированные в проекте. т.е.

blueprint/__init__.py:

from .test import test
from . import views
1 голос
/ 22 мая 2019

Измените основной файл в корневой папке:

from flask import Flask

from source.listener import test

application = Flask(__name__)

application.register_blueprint(test)

application.run()

Файл чертежа внутри подпапки в корневой папке:

listener.py

from flask import Blueprint

from source.view import home


test = Blueprint('test', __name__)

test.add_url_rule('/home', view_func=home,methods=['GET', 'POST'])

Файл представления внутри той же подпапки, что и файл чертежа:

from flask import request

def home():
    if request.method == 'POST':
        user = request.form['name']
        return "Welcome "+user
    else:
        return 'home'

Получить запрос O / P:

 Home

Опубликовать запрос O / P:

Welcome username
...