【问题标题】:How to understand this code of flask?如何理解flask的这段代码?
【发布时间】:2011-04-17 13:31:51
【问题描述】:

谁能解释一下这条线?

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

【问题讨论】:

  • 正在使用 Lambda,因为 LocalProxy() 采用函数参数。

标签: python flask werkzeug


【解决方案1】:

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

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

在某个时候,一个或多个 WSGI 应用程序被推送到全局堆栈上。然后,例如,当在运行时使用current_app 时,将使用当前的顶级应用程序。如果堆栈从未初始化,则 top 将返回 None 并且您将收到类似 AttributeError: 'NoneType' object has no attribute 'app' 的异常。

【讨论】:

  • 几乎正确但不完全。 _request_ctx_stack 是一组请求上下文,其中包含当前应用程序、请求、会话和请求全局变量。这些上下文会根据每个请求推送到堆栈上,否则无法正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 2019-10-11
  • 2020-10-19
  • 1970-01-01
相关资源
最近更新 更多