在flask应用中,全部的flask应用都必须建立一个应用实例。web服务器把它接收的来自客户端的请求经过WSGI的协议传递给这个对象以进行处理。这时候,它会提供一种叫上下文的神奇环境,它能让一些对象能够全局可见,这样你的视图函数就能够去访问这些对象作些处理,而又在同时有那么多请求时确保线程安全。python
flask里有两种上下文,应用上下文和请求上下文,这两种上下文里暴露出了4种变量:web
应用上下文 |
current_app | 活动应用程序的应用实例 |
应用上下文安全 |
g | 在处理请求时临时存储数据,每次请求都会被重设 |
请求上下文服务器 |
request | request对象,封装了客户端发出的http请求的内容 |
请求上下文session |
session | 用来存储值的字典,这些值在请求中是被记住的 |
flask在调度每一个请求前都会push这两种上下文,而请求被处理后又被移除。应用上下文被push时它对应的两个变量就能够被线程访问了,请求上下文也是同样的道理。固然,假如这些上下文没有被激活的话,访问这些变量就会引起错误了。app
举个例子:ide
>>>from flask import Flask, current_app >>>app = Flask(__name__) >>>current_app Traceback (most recent call last): ... RuntimeError: working outside of application context >>>app_ctx = app.app_context() >>>app_ctx.push() >>>current_app.name '__main__' >>>app_ctx.pop()