context(上下文)是什么
发现很多人对context不能理解,这里对网上的几种理解方式进行整理和解答。
- 把context成当前程序之前的状态和接下来的状态,当我们执行程序的时候,很多时候需要调用一些外部变量,如果没这些外部变量,程序就运行不起来,也就是说我们要让程序运行起来就要把这些变量赋值,赋值外部变量的过程就叫做上文,而我们将要达到的状态就叫做下文。
- 把context理解成为环境,在编程中,一些编程构建需要考虑到当前的运行环境,才能理解他的运行结果,就像浏览一篇文章,直接看其中的某一句话,并不能理解其中的意思,谈到这让我想起了公务员考试申论中的语意题,就是让考生联系上下文给出解答。
- 同样大的操作在不同上下文中的结果是不同的,在windows系统中,通过右键点击出现的 菜单英文就是(context menu),在桌面上的点击和在文件夹中的点击结果是不一样的,Windows就是通过上下文来判断输出哪种菜单。
context in Flask
在flask中有两种上下文:application context
和request context
,即应用上下文和请求上下文。
源码定义:
def _lookup_req_object(name):
top = _request_ctx_stack.top
if top is None:
raise RuntimeError(_request_ctx_err_msg)
return getattr(top, name)
def _lookup_app_object(name):
top = _app_ctx_stack.top
if top is None:
raise RuntimeError(_app_ctx_err_msg)
return getattr(top, name)
def _find_app():
top = _app_ctx_stack.top
if top is None:
raise RuntimeError(_app_ctx_err_msg)
return top.app
# 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'))