current_app和g上下文变量有什么区别?

max*_*max 4 python flask

这两个current_appg是应用程序上下文变量,所以它们被加载并与每个请求卸载,因此存储在其上的任何数据将只在同一请求中可用。

我可以看到的唯一区别是,g每个请求的开头都是空的,而current_app开头config是从应用程序对象复制的某些属性(例如)。但这根本不能证明拥有g对象,因为可以很容易地在上存储新信息current_app

我看不到有什么区别?

vis*_*ell 5

我相信你在阅读文档gcurrent_app。所以我可以从中了解到:

current_app

指向处理请求的应用程序。这对于想要支持并行运行的多个应用程序的扩展很有用。

[强调我的]

因此,您在g源代码存储所有内容的同时获取当前应用程序的上下文:

def _lookup_app_object(name):
    top = _app_ctx_stack.top
    if top is None:
        raise RuntimeError(_app_ctx_err_msg)
    return getattr(top, name)

def _find_app():
    top = _app_ctx_stack.top
    if top is None:
        raise RuntimeError(_app_ctx_err_msg)
    return top.app

current_app = LocalProxy(_find_app)
g = LocalProxy(partial(_lookup_app_object, 'g'))
Run Code Online (Sandbox Code Playgroud)

因此,如果您正在运行多个应用程序,current_app则将引用当前的(显而易见的,正确的)g所有内容。