Flask使用上下文让特定的变量在一个线程中全局可访问(例如:我们把request
当作全局变量使用,事实上,request
不可能是全局变量。试想,在多线程服务器中,多个线程同时处理不同客户端的不同请求时,没个线程看到的request
对象必然不同),于此同时却不会干扰其他的线程;
在Flask中有两种上下文:程序上下文和请求上下文;
Flask上下文全局变量
变量名 | 上下文 | 说明 |
---|---|---|
current_app | 程序上下文 | 当前激活程序的程序实例 |
g | 程序上下文 | 处理请求时用作临时存储的对象。每次请求都会重设这个变量 |
request | 请求上下文 | 请求对象,封装了客户端发出的HTTP请求内容 |
session | 请求上下文 | 用户会话,用于存储请求之间需要“记住”的值的词典 |
Flask在分发请求之前激活程序和请求上下文,请求处理完成后再将其删除。程序上下文被激活后,就可以在线程中使用current_app
和g
变量。类似,请求上下文被激活后,就可以使用request
和session
变量;
下面通过python shell演示:
from hello import app
from flask import current_app
# 激活上下文
app_ctx = app.app_context()
app_ctx.push()
print current_app.name
# 删除上下文
app_ctx.pop()