1、谈谈你对flask上下文管理机制的理解?

首先说一下ThreadingLocal,对每个线程保存它的数据,但是flask为了支持协程,自己封装了一个Local对象,在Local对象里保存值。

请求到来时,在RequestContext,里封装了Request对象,使用localstack将请求数据push到local里;

执行视图时,使用request时,是一个LocalProxy全局变量,调用LocalProxy对象的任何方法都会调用_lookup_req_object函数,该函数会再Local中将RequestContext获取,在在RequestContext中获取request或者session

请求结束时,会调用ctx.auto_pop,从local中移除数据。

Flask处理流程

Flask请求上下文源码剖析流程

 

相关文章: