什么是上下文
上下文 : 相当于一个容器,保存了Flask程序运行过程中的一些信息.在计算机中,相对于进程而言,上下文就是进程执行时的环境.
Flask中有两种上下文:请求上下文和应用上下文
请求上下文(request contest)
request,和session都是请求上下文对象
request 封装了HTTP请求的内容,针对的是http请求,request对象只有在上下文的生命周期内才有效,离开了请求的生命周期,其上下文环境就不存在了
也就无法获取request对象了.
session 用来记录请求回话中的信息,针对的用户信息
应用上下文 (application context)
current_app : 表示当前运行程序文件的程序事例,可以通过current_app.name打印当前应用程序实例的名字
g : 处理请求时,用于临时储存的对象,每次请求都会重置
1 当调用app = Flask(name)的时候,创建了程序应用对象
2 request在每次http请求发生时,WSGI server调用Flask.call();然后在flask内部创建flask对象
3 app的生命周期大于request和g,一个app存活期间,可能发生多次 http请求,所以会有多个request,g
4 最终传入视图函数,通过return,redirect,和render_template生成response对象,返回给客户端
从一个Flask App读入配置并且启动开始,就进入了App Context,在其中我们可以配置文件,打开资源文 件,通过路由规则反向URL
请求上下文和应用上下文的区别
请求上下文:保存了客户端和服务器交互的数据
应用上下文 : 在flask程序运行的过程中,保存了一些配置信息,比如程序文件名,数据库的链接,用户信息等
问题
既然在web应用运行时,应用上下文和请求上下文都是thread local 为什么还要独立二者?
是为了能让两个以上的应用共存在WSGI应用中,这样在请求中,可以通过应用上下文来获取当前请求的应用信息
参考链接https://blog.csdn.net/Enjolras_fuu/article/details/79892961