8

谁能解释一下这条线?</p>

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

4

1 回答 1

4

LocalStack 和 LocalProxy的Werkzeug 文档以及对WSGI的一些基本了解可能会有所帮助。

看起来正在发生的事情_request_ctx_stack是创建了一个全局(但为空)堆栈。这适用于所有线程。一些 WSGI 样式的对象(current_apprequestsessiong)被设置为使用全局堆栈中的顶部项目。

在某些时候,一个或多个 WSGI 应用程序被推送到全局堆栈上。然后,例如,当current_app在运行时使用时,使用当前的顶级应用程序。如果堆栈从未被初始化,那么 top 将返回 None 并且你会得到一个像AttributeError: 'NoneType' object has no attribute 'app'.

于 2010-10-13T15:49:17.653 回答