使用Flask Factory Application create_app配置电子邮件令牌

时间:2017-03-26 02:03:04

标签: python flask token config factory

一旦我开始使用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?

之外

希望你理解我的问题。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您应该使用Flask.current_app

from flask import current_app

...

ts = URLSafeTimedSerializer(current_app.config['SECRET_KEY'])

来自the documentation

  

flask.current_app

     

指向处理请求的应用程序。这个   对于想要支持多个应用程序的扩展非常有用   并肩奔跑。这是由应用程序上下文和   不是由请求上下文,所以您可以更改此代理的值   使用app_context()方法。

This link aso详细介绍了Flask应用工厂方法,特别是使用current_app来访问应用配置。