应用程序和请求上下文之间有什么区别?

时间:2014-01-05 20:17:00

标签: flask

Flask文档说有2个本地上下文:应用程序上下文和请求上下文。两者都是根据要求创建的,并在完成后拆除。

那么,有什么区别?每个用例有哪些?是否有任何条件只创建其中一个?

1 个答案:

答案 0 :(得分:7)

  

两者都是根据要求创建的,并在完成后拆除。

在请求生命周期中确实如此。 Flask创建应用程序上下文,请求上下文,做一些魔术,破坏请求上下文,破坏应用程序上下文。

应用程序上下文可以在没有请求的情况下存在,这就是您同时拥有这两者的原因。例如,如果我从shell运行,我可以在没有请求的情况下创建app_context,并且可以访问'current_app`代理。

这是一个设计决策,用于分离关注点,并为您提供不创建请求上下文的选项。请求上下文很昂贵。

在旧的Flask(0.7?)中,您只有请求上下文并使用Werkzeug代理创建了current_app。因此,应用程序上下文只是创建一个模式。

有关appcontext的一些文档,但您可能已经阅读过它:http://flask.pocoo.org/docs/appcontext/