当前请求到来时Flask处理的流程图:
请求到来之后uwsgi会触发app的__call__方法, 由__call__方法再次调用wsgi_app方法
首先将请求相关+空session封装到一个RequestContext对象中 即 ctx # self是app对象, environ请求相关的原始数据,含有self.request
通过ctx.push()将ctx交给LocalStack对象,再由LocakStack将ctx添加到Local中,local结构:
__storage__={ 1231:{stack:[ctx,]}, # {线程id:{"stack":[]}} 1232:{stack:[ctx,]} }
_request_ctx_stack.top取出stack中最后一个数据并使用getattr(obj,name)的方式返回request或者seession中的数据
原文:https://www.cnblogs.com/harryblog/p/11171831.html