目录
RuntimeError: Working outside of application context.
解决方法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)中实现了