1、请求到来先执行app.__call__(self, environ, start_response)
2、然后执行__call__中的wsgi_app方法
3、执行wsgi_app中的request_context方法
4、执行wsgi_app中的ctx.push()
5、执行上述push方法中的_request_ctx_stack.push(self)
_request_ctx_stack是一个全局的LocalStack对象
执行LocalStack对象的push方法,将ctx对象添加到Local对象的stack属性对应的列表中
6、接着执行ctx对象push方法中的session_interface.open_session(self.app, self.request)
执行SecureCookieSessionInterface对象中的open_session方法,获取session,然后赋值给ctx对象的的session属性
7、然后执行wsgi_app方法中self.full_dispatch_request(),执行视图函数
①视图函数中执行request.method
上述request是全局的request,是一个LocalProxy对象
实例化LocalProxy对象将上述偏函数(partial(_lookup_req_object, 'request'))存到对象的__local属性中
request.method=LocalProxy对象.method
LocalProxy对象.method将会调用LocalProxy对象中__getattr__(self, name)
执行上述self._get_current_object()
执行偏函数,获取request对象
②视图函数中执行session['user'] = 123
上述session是全局的session,是一个LocalProxy对象
实例化LocalProxy对象将上述偏函数(partial(_lookup_req_object, 'session'))存到对象的__local属性中
session['user'] = 123将执行LocalProxy对象中的__setitem__方法
执行上述self._get_current_object()
执行偏函数,获取session对象
8、执行full_dispatch_request()中的self.finalize_request方法
然后调用finalize_request方法中的process_response方法,将内存中session数据存入到响应个用户的cookie中
9、最后执行wsgi_app方法中的auto_pop方法,将ctx对象从全局的Local对象的列表中移除