公式ドキュメントは少し面倒です。「before」と「after」はミドルウェアをタプルで注文するために使用されますが、「before」と「after」が要求/応答フェーズを指す場合もあります。また、「最初/最後である必要があります」が混在しており、どちらを「最初」として使用するかが明確ではありません。
私は違いを理解しています..しかし、Djangoの初心者にとっては複雑なようです。
組み込みのミドルウェアクラスの正しい順序を提案できますか(すべてを有効にすると仮定します)、そして最も重要なこととして、あるクラスが他のクラスの前後にある理由を説明できますか?
これが私が見つけたドキュメントからの情報を含むリストです:
UpdateCacheMiddleware
- 'Vary:'を変更するものの前
SessionMiddleware
にGZipMiddleware
、、LocaleMiddleware
- 'Vary:'を変更するものの前
GZipMiddleware
- 応答本体を変更または使用する可能性のあるMWの前
- 変更後
UpdateCacheMiddleware
:「変更:」を変更
ConditionalGetMiddleware
- Before
CommonMiddleware
:は、次の場合に「Etag:」ヘッダーを使用しますUSE_ETAGS=True
- Before
SessionMiddleware
- 変更後
UpdateCacheMiddleware
:「変更:」を変更 - 以前
TransactionMiddleware
:ここではトランザクションは必要ありません
- 変更後
LocaleMiddleware
、SessionMiddleware、CacheMiddlewareの後の最上位の1つ- 変更後
UpdateCacheMiddleware
:「変更:」を変更 - 変更後
SessionMiddleware
:セッションデータを使用
- 変更後
CommonMiddleware
- 応答を変更する可能性のあるMWの前(ETagを計算します)
- その後
GZipMiddleware
、gzip圧縮されたコンテンツのEタグは計算されません - 上部に近い:
APPEND_SLASH
またはPREPEND_WWW
CsrfViewMiddleware
- CSRF攻撃が処理されたと想定するビューミドルウェアの前
AuthenticationMiddleware
- 後
SessionMiddleware
:セッションストレージを使用
- 後
MessageMiddleware
- 後
SessionMiddleware
:セッションベースのストレージを使用できます
- 後
XViewMiddleware
TransactionMiddleware
- DBを使用するMWの後:
SessionMiddleware
(DBを使用するように構成可能) - すべて
*CacheMiddleWare
が影響を受けることはありません(例外として:独自のDBカーソルを使用します)
- DBを使用するMWの後:
FetchFromCacheMiddleware
- 'Vary:'を変更するものの後、それらを使用してキャッシュハッシュキーの値を選択する場合
- その後
AuthenticationMiddleware
、使用することが可能ですCACHE_MIDDLEWARE_ANONYMOUS_ONLY
FlatpageFallbackMiddleware
- 下:最後の手段
- ただし、DBを使用することは問題ではありません
TransactionMiddleware
(はい?)
RedirectFallbackMiddleware
- 下:最後の手段
- ただし、DBを使用することは問題ではありません
TransactionMiddleware
(はい?)
(このリストに提案を追加して、すべてを1か所に集めます)