本文是我在学习flask中对上下文和几个类似全局变量的思考和研究,也有我自己的理解在内。
为了研究flask中的current_app、g、request、session,我找到定义在global.py的源码:
# context locals
_request_ctx_stack = LocalStack()
_app_ctx_stack = LocalStack()
current_app = LocalProxy(_find_app)
request = LocalProxy(partial(_lookup_req_object, 'request'))
session = LocalProxy(partial(_lookup_req_object, 'session'))
g = LocalProxy(partial(_lookup_app_object, 'g'))
可以看到主要由_lookup_req_object、_lookup_app_object、_find_app等组成,我先来分析request和session
其实request和session原理上是一样的,所以将其归为一类,称为请求上下文。
我们从最里面看起,partial(_lookup_req_object, 'request'),最外层是一个偏函数,不过这不是重点,它主要是将'request'传给_lookup_req_object,没有其他含义, 顺着_lookup_req_object找到它的源码