You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask 2.0 async访问get_features POST接口报Working outside of request context错误

错误原因

这个报错是因为你在没有激活请求上下文的环境下尝试访问Flask的request对象:

  1. Flask 分为应用上下文和请求上下文两类上下文,request、session等变量属于请求上下文范畴,只有请求上下文处于激活状态时才能正常访问。
  2. 你代码中手动添加的with app.app_context()仅会激活应用上下文,不会携带当前请求的上下文信息。
  3. 被route装饰器修饰的路由函数默认进入时就已经自动激活了对应的请求上下文,你额外套的应用上下文块反而隔断了原有请求上下文,导致块内无法访问request对象。
解决方案
  • 直接删除多余的with app.app_context()包裹逻辑即可,修正后的代码如下:
@api_v1.route('/get_features', methods=['POST'])
async def get_features():
    results = []
    inputs = request.json
    responses = await get_features_for_all(inputs)
    for response in responses:
        results.append(response)
    return jsonify({'result': results})
  • 如果你确实有场景需要在独立异步任务、脱离路由函数的其他位置访问请求相关变量,不要用应用上下文,而是用copy_current_request_context装饰器传递当前请求上下文,示例如下:
from flask import copy_current_request_context

@api_v1.route('/get_features', methods=['POST'])
async def get_features():
    @copy_current_request_context
    async def inner_task():
        inputs = request.json
        return await get_features_for_all(inputs)
    
    responses = await inner_task()
    return jsonify({'result': responses})

内容的提问来源于stack exchange,提问作者kartik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:24:02