在上下文之外使用烧瓶变量
Use flask variable outside of context
在 Flask 应用程序中(在 __init__.py
中初始化)我有两个蓝图 - auth
和 main
。在 auth
蓝图中,我试图设置一些变量(将从数据库加载并依赖于 current_user.get_id()
),这些变量应该在 main
蓝图中用作 url-prefix :
auth.py
@auth.route('/login', methods=['POST'])
def login_post():
username = request.form.get('username')
password = request.form.get('password')
user_inst = user.query.filter_by(username=username).first()
if not user_inst or not check_password_hash(user_inst.password, password):
flash('Invalid credentials. Check you input and try again.')
return redirect(url_for('auth.login'))
login_user(user_inst)
g.team_name = 'some_team_name'
#session['team_name'] = 'some_team_name'
# if the above check passes, then we know the user has the right credentials
return redirect(url_for('main.some_func'))
在主蓝图中,需要获取team_name
变量:
main = Blueprint('main', __name__, static_folder="static", static_url_path="", url_prefix=g.team_name)
请问有没有一种正确的方法可以将变量从 auth
导入到 main
(在初始化之前)而不获取:
RuntimeError: Working outside of application context.
您的问题的基本解决方法是在 app.app_context():
中注册蓝图
这似乎是您的第一个 flask 项目,这是考虑项目结构的常见问题。阅读 Flask 应用程序工厂模式并应用它。
your_app/__init__.py
def create_app(app_config):
app = Flask(__name__)
with app.app_context():
from your_app.somewhere import team_name
app.register_blueprint(team_name)
return app
在 Flask 应用程序中(在 __init__.py
中初始化)我有两个蓝图 - auth
和 main
。在 auth
蓝图中,我试图设置一些变量(将从数据库加载并依赖于 current_user.get_id()
),这些变量应该在 main
蓝图中用作 url-prefix :
auth.py
@auth.route('/login', methods=['POST'])
def login_post():
username = request.form.get('username')
password = request.form.get('password')
user_inst = user.query.filter_by(username=username).first()
if not user_inst or not check_password_hash(user_inst.password, password):
flash('Invalid credentials. Check you input and try again.')
return redirect(url_for('auth.login'))
login_user(user_inst)
g.team_name = 'some_team_name'
#session['team_name'] = 'some_team_name'
# if the above check passes, then we know the user has the right credentials
return redirect(url_for('main.some_func'))
在主蓝图中,需要获取team_name
变量:
main = Blueprint('main', __name__, static_folder="static", static_url_path="", url_prefix=g.team_name)
请问有没有一种正确的方法可以将变量从 auth
导入到 main
(在初始化之前)而不获取:
RuntimeError: Working outside of application context.
您的问题的基本解决方法是在 app.app_context():
这似乎是您的第一个 flask 项目,这是考虑项目结构的常见问题。阅读 Flask 应用程序工厂模式并应用它。
your_app/__init__.py
def create_app(app_config):
app = Flask(__name__)
with app.app_context():
from your_app.somewhere import team_name
app.register_blueprint(team_name)
return app