Flaskのコンテキスト
1247 ワード
本文は作者の独学のために使うだけで、システムはmacOSで、情報の正確さを保証しません.
Flaskのコンテキスト使用
Javaやpythonなどoo言語に慣れている人は、flaskのプライマリファイルにが初期化されたクラスで サーバを起動するときに、新しいプロセスを同時に起動してバックグラウンドプログラムを実行する必要がある場合(例えば、データベースから新しいデータがあるかどうかを問い合わせるプログラムを起動し、ある場合はキャプチャして処理するか、あるいはタイミングタスクなど)は、サービスがまだ完全に起動していない場合に開始し、ある場合、サーバが存在しない、タイミングタスクが失敗するなどのエラーを引き起こす可能性があります.
ここで提案したソリューションは第1のケースのみを解決することができ,第2のケースは後でソリューションを発見しても補完する.ここでは
Flaskのコンテキスト使用
Javaやpythonなどoo言語に慣れている人は、flaskのプライマリファイルに
app = Flask(__name__)
にメンバー変数や初期化関数を追加できない理由に悩んでいるかもしれません.私もこの問題に興味を持っています.同時に、この需要を解決することを望んでいますが、残念ながら何も得られません.メンバー変数や初期化関数を書くことができないと問題になります.それはwebです.pyこのプログラムでは、クラスをインスタンス化する必要がある場合は、最外層に書く必要があります.システムが起動すると実行が開始され、多くの問題が発生します.from flask import current_app
が使用されるとエラーが発生します.このクラスを初期化するときにこのappが本当に開いていないので、current_app
は見つかりません.これはプログラムでよく見られるエラータイプで、A初期化にはインスタンス化Bが必要であり、B初期化にはインスタンス化Aが必要であり、互いに依存している.ここで提案したソリューションは第1のケースのみを解決することができ,第2のケースは後でソリューションを発見しても補完する.ここでは
app.app_context()
を使います.app = Flask(__name__)
with app.app_context():
db = Database()
re = db.get_redis()
conn = db.get_mongo()
config = Config()
with app.app_context():
文では、サービスが本当に走っていなくてもappインスタンスがすでに存在しており、ここでappインスタンスが下のクラス初期化関数に何らかの方法で伝達されることで、これらのクラスでcurrent_app
を読み取ることができないという問題を解決することができ、コードが正しく実行される.