flask之请求上下文

请求上下文源码分析

第一阶段:将ctx(request,session)放到Local对象上
				   
第二阶段:视图函数导入:request/session 
request.method
	-LocalProxy对象.method,执行getattr方法,getattr(self._get_current_object(), name)
		-self._get_current_object()返回return self.__local(),self.__local(),在LocakProxy实例化的时候,object.__setattr__(self, '_LocalProxy__local', local),此处local就是:partial(_lookup_req_object, 'request')

	-def _lookup_req_object(name):
			top = _request_ctx_stack.top #_request_ctx_stack 就是LocalStack()对象,top方法把ctx取出来
			if top is None:
				raise RuntimeError(_request_ctx_err_msg)
			return getattr(top, name)#获取ctx中的request或session对象

第三阶段:请求处理完毕
		- 获取session并保存到cookie
		- 将ctx删除

程序运行,两个LocalStack()对象,一个里面放request和session,另一个放g和current_app

原文地址:https://www.cnblogs.com/XuChengNotes/p/12149311.html