flask web developmentノートを読む


flaskアプリケーションでは、すべてのflaskアプリケーションがアプリケーションインスタンスを作成する必要があります.Webサーバは,受信したクライアントからの要求をWSDIのプロトコルを介してこのオブジェクトに渡して処理する.この場合、コンテキストという不思議な環境が提供され、いくつかのオブジェクトをグローバルに表示することができます.これにより、ビュー関数はこれらのオブジェクトにアクセスして処理することができ、同時に多くのリクエストがある場合にスレッドの安全を確保することができます.
flaskには2つのコンテキストがあり、アプリケーションコンテキストとリクエストコンテキストの2つのコンテキストには4つの変数が露出しています.
コンテキストの適用
current_app
アクティブなアプリケーションの適用例
コンテキストの適用
g
要求処理時に一時的にデータが格納され、要求ごとにリセットされる
要求コンテキスト
request
requestオブジェクトは、クライアントからのhttpリクエストの内容をカプセル化します.
要求コンテキスト
session
リクエストで記憶された値を格納する辞書
flaskは、各リクエストをスケジューリングする前にpushという2つのコンテキストを有し、リクエストが処理された後に削除される.アプリケーションコンテキストがpushされると、対応する2つの変数がスレッドにアクセスされ、リクエストコンテキストも同様です.もちろん、これらのコンテキストがアクティブになっていない場合、これらの変数にアクセスするとエラーが発生します.
例を挙げます.
>>>from flask import Flask, current_app
>>>app = Flask(__name__)
>>>current_app
Traceback (most recent call last):
...
RuntimeError: working outside of application context
>>>app_ctx = app.app_context()
>>>app_ctx.push()
>>>current_app.name
'__main__'
>>>app_ctx.pop()