在外部模块中使用flask.current_app()的正确方法?

时间:2015-12-23 06:19:57

标签: python flask

我有一些代码:

application.py:

from forms import MyForm

app = Flask(__name__)
app.config.from_pyfile('config.py')

@app.route('/', methods=('GET', 'POST'))
def index():
    form = MyForm()
    if form.validate_on_submit():
        print('Form submited')
    return render_template('index.html', form=form)

if __name__ == '__main__':
    app.run(debug=True)

forms.py:

from flask import current_app
from flask_wtf import Form
from flask_wtf.file import FileField, FileAllowed

class MyForm(Form):
    image = FileField('Image',
            [FileAllowed(current_app.config['ALLOWED_EXTENSIONS'],
            'Wrong extension.')])

但是我收到了下一个错误RuntimeError: working outside of application context

我使用循环导入语句或在代码中间使用import语句(或只是导入config.py = D)获得一些工作变体但是如何在 pythonic Flask方式中修复它?

1 个答案:

答案 0 :(得分:0)

由于image是一个类属性,因此当您执行from forms import MyForm时会运行它。此操作失败,因为current_appproxy,仅在应用运行后才有效。

正确的做法是将import语句移到index()内。这可以保证它只在请求期间运行,这可以保证应用程序处于活动状态。