如果你研究 Flask WSGI 应用内部如何工作,你会找到和这非常相似的一段代码:
def wsgi_app(self, environ):
with self.request_context(environ):
try:
response = self.full_dispatch_request()
except Exception, e:
response = self.make_response(self.handle_exception(e))
return response(environ, start_response)
request_context()
方法返回一个新的 RequestContext
对象,并结合 with 声明来绑定上下文。 从相同线程中被调用的一切,直到 with 声明结束前,都可以访问全局的请求 变量( flask.request
和其它)。
请求上下文内部工作如同一个栈。栈顶是当前活动的请求。 push()
把上下文添加到栈顶, pop()
把它移出栈。在出栈时,应用的 teardown_request()
函数也会被执行。
另一件需要注意的事是,请求上下文被压入栈时,并且没有当前应用的应用上下文, 它会自动创建一个 应用上下文 。