怎么理解这个烧瓶的代码?

时间:2010-09-27 01:13:01

标签: python flask werkzeug

有人可以解释这一行吗?

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

1 个答案:

答案 0 :(得分:4)

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

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

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