(1)第1章:app,Flaskオブジェクトを作成し,flaskプラグインをappに登録する

4118 ワード

Flask:コアオブジェクトコアオブジェクトには、構成情報の保存、ルーティング試行関数の登録などのAppContext:Flaskのカプセル化、urlのパラメータ、urlのフルパスなどの要求情報の保存など、さまざまな機能が搭載されていますRequestContext:Requestのカプセル化
実際のエンコーディングでは、FlaskまたはRequestの情報が必要かもしれませんが、この2つのオブジェクトを直接インポートして関連情報を取得する必要はありません.正しい方法は、AppContext、RequestContextから間接的に必要な情報を取得することです.
それでもContextを導入してコンテキストを使用する必要はなく、current_に戻りました.appやrequestなどのLocalProxyは、コンテキストオブジェクトを間接的に操作する能力を提供し、プロキシ(LocalProxy)モードを使用しています.
flask動作原理1.要求がFlaskフレームワークに入ると、まずRequest Contextがインスタンス化され、このコンテキストは要求された情報がRequestにカプセル化され、このコンテキストがスタック**(_request_ctx_stack/_app_ctx_strack)**の構造、すなわち、以前にpushメソッドにプッシュされる
2、RequestContext在入**request_ctx_stackの前に、まずチェックします.app_ctx_strackが空であるかどうか、空である場合、AppContextのオブジェクトがスタックされ、このリクエストが_にスタックされます.request_ctx_stack**中
3、私たちのcurrent_appもrequestオブジェクトも永遠に**_を指しますapp_ctx_strack**/_request_ctx_stackのスタックトップ要素、すなわちそれぞれ2つのコンテキストを指し、この2つの値が空の場合、LocalProxy(エージェント)はunboundの状態になります.
4、要求が終了すると、この要求はスタック-popを出す
インスタンス化すると、コンストラクション関数のパラメータはFlask appコアオブジェクトの識別app=Flask(name)として使用されます.
from flask import Flask
app = Flask(__name__)
#   app.config.from_object      
#             ,      
app.config.from_object('app.secure')
app.config.from_object('app.setting')
registe_blueprint(app)
#   LoginManager
login_manager.init_app(app)
cache.init_app(app)#        app 
mail.init_app(app)# app       

Web appの起動
**debug=True:**デバッグモードをオン->1.ファイルを変更するたびにサーバ2を再起動する必要はありません.Webページに例外*host:**を表示できます.このWebサイトにアクセスできるipアドレス*port:**起動ポート**threaded:**マルチスレッドを開くことを指定できます.
from app import create_app
app = create_app()
if __name__ == '__main__':
	app.run(host="0.0.0.0", port=81, debug=True,threaded=True)

current_をインポートするappは現在のappオブジェクトを取得し、一般的にプロファイルデータの取得を実現するために使用される
from flask import current_app
current_app.config['XXX']