Flask-current_アプリという穴

1456 ワード

今日同級生は私にcurrentについて聞いた.アプリの問題は、私も前に慕課七月先生が話したflaskプロジェクトを見て、ちょうど出会ったことがあるので、皆さんにも共有してあげました.【current_app】以前にもアイテムを書くときにcurrent_アプリ、先生は今のプロジェクトを代表するアプリを話しています.もちろんプロジェクトを書き終わっても何の問題もありませんが、今回の勉強を通じて、私はやっと発見しました.いい穴ですね.次のコードを見てみましょう
from flask import Flask, current_app

app = Flask(__name__)
print(app)    #    :

みんなはこのコードに対して问题がないことを信じて、どんな作用があることをも知らないで、それでは下のこのコードを见てください
from flask import Flask, current_app

app = Flask(__name__)
print(app)    #    :
app2 = current_app
print(app2)    #    :          

エラーメッセージは次のとおりです:RuntimeError:Working outside of application context.私たちはコンテキストの外で実行しています.これはいったいどういうことですか.次の図を見てください.
flask内部のメンテナの2つのスレッドから分離されたスタック、current_appはAppContext(アプリケーションコンテキスト)のスタックトップを指し、requestはRequestContext(リクエストコンテキスト)のスタックトップを指し、リクエストが入るとRequestオブジェクトがスタックに押し込まれ、requestは処理リクエストを指し、次にAppContextスタックトップが空であるかどうかを判断し、空であればスタックにAppContextオブジェクト、すなわちappを押し込み、current_appは指向性があるので、プロジェクトで使用するのは間違っていませんが、上記のコードはリクエストで実現されていないので、AppContextスタックは空です.current_appはAppContextオブジェクトを指していませんが、どのように解決しますか?
from flask import Flask, current_app

app = Flask(__name__)
print(app)    #    :
with app.app_context():
    app2 = current_app
    print(app2)    #    :

ここではwith,そのapp_を使用しましたcontext()は、AppContextオブジェクトを返し、__を実現します.enter__と_exit__AppContextオブジェクト、すなわちappインスタックとアウトスタックを別々にして、この操作を完了しました.