一旦我开始使用Flask工厂应用程序模式,我就会对配置和导入感到困惑。
我正在使用#app / init .py中的create_app函数创建一个应用程序 我有一个用于设置开发/测试/生产变量的配置文件,以及一个带有另一个配置文件的实例文件夹。
def create_app(config_name):
app=Flask(__name__, instance_relative_config=True)
app.config.from_object(app_config[config_name])
app.config.from_pyfile('config.py')
etc...
return app
我正在使用蓝图并在#app / auth / views.py中拥有身份验证视图 我正在尝试使用URLSafeTimedSerializer设置电子邮件确认令牌...
from itsdangerous import URLSafeTimedSerializer
@auth.route('/register', methods=['GET','POST'])
def register():
ts = URLSafeTimedSerializer(app.config['SECRET_KEY'])
token = ts.dumps(self.email, salt='email-confirm-key')
etc...
现在我的问题是,我的变量''需要app.config [' SECRET_KEY']设置。但我无法定义app变量(如所有在线教程中所示)。我尝试导入时收到错误...(在#app / auth / views.py中)
from .. import app
当我尝试导入时......
from .. import create_app
有人可以使用' app'来阐明如何初始化模块。和应用程序配置在烧瓶应用工厂create_app?
之外希望你理解我的问题。
答案 0 :(得分:1)
在这种情况下,您应该使用Flask.current_app
from flask import current_app
...
ts = URLSafeTimedSerializer(current_app.config['SECRET_KEY'])
flask.current_app
指向处理请求的应用程序。这个 对于想要支持多个应用程序的扩展非常有用 并肩奔跑。这是由应用程序上下文和 不是由请求上下文,所以您可以更改此代理的值 使用app_context()方法。
This link aso详细介绍了Flask应用工厂方法,特别是使用current_app
来访问应用配置。