我对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
等,等等。
我已经尝试过并且在推广环境方面没有成功。现在有多种不太好的方法可以做到这一点,但是什么是“规范的”方法呢?
答案 0 :(得分:0)
application factory的概念在Flask 1.0中并不陌生。如果您的应用不需要工厂,则不必使用工厂。
如果您确实使用应用程序工厂,则通常不会直接在该应用程序上注册任何路由。您将创建一个蓝图,注册到该蓝图的路线,然后在应用程序工厂中将该蓝图附加到该应用程序。
在任何需要访问应用程序配置的地方,您都可以使用current_app
proxy。
例如,在应用程序的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