RE:Working outside of application context

本文探讨了在Flask中遇到'Working outside of application context'错误的原因,介绍了如何通过人为入栈和with语句来修复,并揭示了上下文管理器AppContext的作用。
摘要由CSDN通过智能技术生成

目录

RuntimeError: Working outside of application context.

解决方法1:可以选择人为入栈。

解决方法2:可以使用with语句(不了解with语句用法的同学请见下文)。


RuntimeError: Working outside of application context.

from flask import Flask, current_app

app = Flask(__name__)

a = current_app
d = current_app.config["DEBUG"]

这样运行就会出现RuntimeError: Working outside of application context.

为什么呢?

原因就是current_app是<LocalProxy unbound>,也就是说在_app_ctx_stack栈为空。

我们都知道在flask中,当一个请求进入的时候,_request_ctx_stack入栈之前,会先检查_app_ctx_stack栈是否为空,如果_app_ctx_stack栈空,则会先将AppContext压入栈中,然后在将RequestContext入栈。

解决方法1:可以选择人为入栈。

from flask import Flask, current_app

app = Flask(__name__)

ctx = app.app_context()
ctx.push()
a = current_app
d = current_app.config["DEBUG"]
ctx.pop()

解决方法2:可以使用with语句(不了解with语句用法的同学请见下文)。

from flask import Flask, current_app

app = Flask(__name__)

with app.app_context():  # Create an :class:`~flask.ctx.AppContext`.
    a = current_app
    d = current_app.config['DEBUG']

那么为什么可以这样写呢?原因就是app.app_context()是一个上下文表达式,它返回了一个上下文管理器AppContext(),在class AppContext(object)中实现了

参考:https://zhuanlan.zhihu.com/p/53465421

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值