AppContext和RequestContext都有push、pop、enter、exit方法

Flask与AppContext

Flask存储在AppContext中
提供了注册路由,存储配置信息等

真正取数据的时候,是从AppContext中取值,而不是直接从Flask中取,因为有些数据不是属于Flask的,还有一些外部的数据,将Flask和外部数据一同存储到AppContext中

Request与RequestContext

Request存储在RequestContext中
保存了请求信息

那为什么使用的时候不导入Context

_request_ctx_stack和_app_ctx_stack是两个通过LocalStack实例化的栈。

image.png

app入栈

当一个请求入栈时,需要检查_app_ctx_stack中是否为空,如果为空则将AppContext入栈

请求入栈

在一个请求进来的时候,在app入栈之后,将RequestContext把数据压入(push)到_request_ctx_stack栈中

image.png