Flask中遭遇Working outside of application context错误求助
问题解决:Flask应用上下文错误及请求前打印上下文信息
错误原因分析
你的问题源于两处关键错误:
- 配置未正确存入应用配置字典:
init.py中仅定义了MAX_CONTENT_LENGTH变量,未将其添加到app.config中,导致后续无法通过current_app.config获取该配置。 current_app调用时机错误:在uploads.py的模块级别直接调用current_app,此时蓝图尚未绑定到应用实例,应用上下文未激活,必然触发Working outside of application context报错。
修复步骤
1. 修正应用配置(init.py)
将上传大小配置正确存入app.config:
from flask import Flask def create_app(): app = Flask(__name__) # 上传配置选项 file_mb_max = 100 # 单位:MB app.config['MAX_CONTENT_LENGTH'] = file_mb_max * 1024 * 1024 # 将配置存入app.config # 注册蓝图 from .uploads import uploads app.register_blueprint(uploads, url_prefix='/upload/') return app
2. 调整current_app调用时机(uploads.py)
不要在模块加载阶段直接调用current_app,改用Flask的before_request钩子——它会在每个请求到达路由前自动执行,此时应用上下文已激活:
from flask import Blueprint, current_app, request uploads = Blueprint('uploads', __name__) # 请求到达路由前执行的钩子 @uploads.before_request def print_context_info(): # 打印上下文信息 print("当前MAX_CONTENT_LENGTH配置:", current_app.config['MAX_CONTENT_LENGTH']) # 可按需添加更多上下文信息打印 print("当前请求路径:", request.path)
3. 验证效果
启动应用后,当有请求访问/upload/下的路由时,控制台会先打印你需要的上下文信息,再执行路由逻辑。
关于之前with app.app_context()无效的说明
你可能曾在create_app中导入蓝图前使用上下文,但导入蓝图时uploads.py的模块级代码会立即执行,此时上下文已退出。而before_request是Flask官方推荐的请求前执行代码的方式,能确保上下文始终处于激活状态。
内容的提问来源于stack exchange,提问作者Coeurjoli Martinez
相关产品推荐
相关产品推荐

