2016-11-30 88 views
0

current_appg都是应用程序上下文变量,因此它们随每个请求一起加载和卸载,因此存储在它们上的任何数据只会在同一个请求中可用。current_app和g上下文变量有什么区别?

我可以看到的唯一区别是g在每个请求开始时开始为空,而current_app以从应用程序对象复制的某些属性(如config)开始。但是这并不能证明拥有g对象是正确的,因为人们可以轻松地在current_app上存储新信息。

我没有看到什么区别?

回答

0

我相信你阅读gcurrent_app上的文档。所以我可以从中明白:

current_app

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

[重点煤矿]

所以你得到当前应用程序的情况下,而g商店应有尽有,从source code

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')) 

所以,如果你运行多个应用程序,current_app会引用当前的(明显的,正确的)和g的一切。

+0

即使我运行了几个应用程序,为什么我需要'g'?我所提供的任何数据似乎都会在当前请求结束之前一直存在(我认为这将始终由一个应用程序处理)。那么为什么不把我的数据放到'current_app'? – max

+0

但是分离上下文并不是很好的理由。你在'current_app'中存储特定于应用程序的上下文,而在'g'中存储该应用程序特定的所有其他内容? –

相关问题