2016-11-30 6 views
0

current_appgは両方ともアプリケーションコンテキスト変数であるため、要求ごとにロードおよびアンロードされるため、それらに格納されたデータはすべて同じリクエスト内でのみ使用できます。current_appとgコンテキスト変数の違いは何ですか?

唯一の違いは、gは各リクエストの開始時に空になりますが、current_appはアプリケーションオブジェクトからコピーされた属性(configなど)で始まります。しかし、それはcurrent_appに新しい情報を簡単に保存できるので、gオブジェクトを持つことを正当化するものではありません。

表示されない違いは何ですか?

答えて

0

gcurrent_appのドキュメントを読んでいると思います。それでは、私はそれから理解できる:

current_appを:

要求を処理するアプリケーションを指します。これは、が複数のアプリケーションを同時にサポートする拡張機能の場合に便利ですが並行して実行されています。

[重点鉱山]

だから、source codeから、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')) 

あなたは、いくつかのアプリケーションを実行している場合current_appは現在のもの(明白な、右)を参照し、gはすべてのものを参照します。

+0

複数のアプリケーションを実行しても、なぜ「g」が必要ですか?私が置いたデータは、現在の要求の終わりまで正確に生き残ることができます(私はいつも1つのアプリケーションによって処理されると想定しています)。だから私のデータを 'current_app'に入れないのはなぜですか? – max

+0

しかし、コンテキストを分離することはそれにはあまり適していません。アプリケーション特有のコンテキストを 'current_app'に格納し、' g'にはそのアプリケーション固有のものをすべて格納しますか? –

関連する問題