🧅

Djangoミドルウェア — リクエスト/レスポンスを包む玉ねぎ構造

MIDDLEWARE設定順序がなぜ重要か、内部でどうチェーンされるか

リクエスト:Security → Session → Common → Auth → View
レスポンス:View → Auth → Common → Session → Security

玉ねぎを剥くように入り、皮を着せるように出る。

内部実装

get_responseがチェーンの次のリンク。Djangoがサーバー起動時にMIDDLEWAREリストを逆順で巡回し、各ミドルウェアのget_responseに次のミドルウェアを接続。

順序が重要な理由

SessionMiddlewareAuthenticationMiddlewareより前になければならない — AuthがセッションからThere情報を読むため。順序を変えるとrequest.userが常にAnonymousになる。

キーポイント

1

MIDDLEWAREリスト順序=リクエスト処理順序(逆順でチェーン)

2

get_response(request)呼び出しが次のミドルウェア/Viewを実行

3

リクエスト:外→中、レスポンス:中→外(玉ねぎ構造)

4

SessionがAuthより先に来なければrequest.userが動作しない

ユースケース

カスタムロギング — リクエスト/レスポンスを包んで処理時間計測 CORS処理 — CorsMiddlewareがレスポンスヘッダーを追加

参考資料