有人可以解释这一行吗?
g = LocalProxy(lambda: _request_ctx_stack.top.g)
来自烧瓶的代码
from werkzeug import LocalStack, LocalProxy
# context locals
_request_ctx_stack = LocalStack()
current_app = LocalProxy(lambda: _request_ctx_stack.top.app)
request = LocalProxy(lambda: _request_ctx_stack.top.request)
session = LocalProxy(lambda: _request_ctx_stack.top.session)
g = LocalProxy(lambda: _request_ctx_stack.top.g)
本地代码在这里:http://pastebin.com/U3e1bEi0
答案 0 :(得分:4)
LocalStack和LocalProxy的Werkzeug documentation可能有所帮助,以及对WSGI的一些基本了解。
看来正在发生的是创建一个全局(但空)堆栈_request_ctx_stack
。这适用于所有线程。一些WSGI样式的对象(current_app
,request
,session
和g
)被设置为使用全局堆栈中的顶级项。
在某些时候,一个或多个WSGI应用程序被推送到全局堆栈。然后,例如,当在运行时使用current_app
时,使用当前的顶级应用程序。如果堆栈从未初始化,那么top将返回None,你会得到像AttributeError: 'NoneType' object has no attribute 'app'
这样的异常。