Python 如何理解烧瓶的代码?
有人能解释一下这句话吗Python 如何理解烧瓶的代码?,python,flask,werkzeug,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(la
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)
Local的代码在这里:对于LocalStack和LocalProxy可能会有所帮助,并且对其有一些基本的了解
似乎正在发生的事情是,创建了一个全局(但为空)堆栈\u request\u ctx\u stack
。这对所有线程都可用。一些WSGI样式的对象(当前应用程序
、请求
、会话
和g
)被设置为使用全局堆栈中的顶部项
在某个时刻,一个或多个WSGI应用程序被推到全局堆栈上。然后,例如,当运行时使用当前应用程序时,将使用当前顶级应用程序。如果堆栈从未初始化,那么top将返回None,您将得到一个异常,如
AttributeError:“NoneType”对象没有属性“app”
几乎正确,但不完全正确。_request_ctx_堆栈是一个请求上下文堆栈,其中包含当前应用程序、请求、会话和请求全局。这些上下文按每个请求推送到堆栈上,否则这将无法工作。使用Lambda是因为LocalProxy()接受函数参数。