Лучшие методы доступа к приложению из __init__.py create_app () с использованием Blueprints и Flask 1.0+ - PullRequest
0 голосов
/ 06 ноября 2018

Меня немного смущают изменения в Flask 1.0. Документы предлагают создать фабрику для приложения в __init__.py, где app=create_app(config_file), который вызывается из run.py.

Теперь в предыдущих версиях Flask я мог from application import app, скажем, контроллер чертежа, потому что приложение не было возвращено из create_app(). Я не могу позвонить create_app() снова, но у меня нет доступа к @app.route, app.config и т. Д. И т. Д.

Я пытался, но безуспешно выдвигал контекст. Теперь есть разные, не очень приятные способы сделать это, но что такое «канонический» способ?

1 Ответ

0 голосов
/ 06 ноября 2018

Концепция фабрики приложений не нова для Flask 1.0. Вам не нужно использовать фабрику, если ваше приложение не нуждается в ней.

Если вы используете фабрику приложений, обычно вы не регистрируете любые маршруты непосредственно в приложении. Вместо этого вы создаете чертеж, регистрируете маршруты к нему и на фабрике приложений присоединяете план к приложению.

Везде, где вам нужен доступ к конфигурации приложения, вы должны использовать прокси current_app .

Например, в модуле views.py в вашем приложении вы можете создать план только для представлений; Я включил пример использования current_app для доступа к конфигурации:

from flask import Blueprint, current_app

bp = BluePrint('main', __name__)

@bp.route(...)
def some_route_name(...):
    # ...
    if current_app.config['SOME_CONFIGURATION_SETTING']:
        # ...

и вы зарегистрируете план с помощью

def create_app(config_filename=None):
    app = Flask(__name__)

    # configuration setup, use the confuration module as a default
    from . import configuration
    app.config.from_object(config)
    app.config.from_envvar("PROJECTNAME_SETTINGS", silent=True)
    if config_filename is not None:
        app.config.from_pyfile(config_filename)

    from . import views
    app.register_blueprint(views.bp)

    # other registrations

    return app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...