Официальная документация немного запутана: «до» и «после» используются для упорядочения MiddleWare в кортеже, но в некоторых местах «до» и «после» относятся к фазам запрос-ответ. Кроме того, «должен быть первым/последним» смешаны, и неясно, какой из них использовать в качестве «первого».
Я понимаю разницу.. однако это кажется сложным для новичка в Django.
Можете ли вы предложить какой-то правильный порядок для встроенных классов MiddleWare (при условии, что мы включим их все) и — самое главное — объяснить, ПОЧЕМУ один идет раньше/после других?
вот список с информацией из документов, которые мне удалось найти:
UpdateCacheMiddleware
- Before those that modify 'Vary:'
SessionMiddleware
,GZipMiddleware
,LocaleMiddleware
- Before those that modify 'Vary:'
GZipMiddleware
- Before any MW that may change or use the response body
- После
UpdateCacheMiddleware
: изменяет «Vary:»
ConditionalGetMiddleware
- Before
CommonMiddleware
: uses its 'Etag:' header whenUSE_ETAGS=True
- Before
SessionMiddleware
- After
UpdateCacheMiddleware
: Modifies 'Vary:' - До
TransactionMiddleware
: здесь транзакции не нужны
- After
LocaleMiddleware
, One of the topmost, after SessionMiddleware, CacheMiddleware- After
UpdateCacheMiddleware
: Modifies 'Vary:' - После
SessionMiddleware
: используются данные сеанса.
- After
CommonMiddleware
- Before any MW that may change the response (it calculates ETags)
- После
GZipMiddleware
он не будет вычислять E-Tag для содержимого, сжатого с помощью gzip. - Ближе к началу: перенаправляется, когда
APPEND_SLASH
илиPREPEND_WWW
CsrfViewMiddleware
- Before any view middleware that assumes that CSRF attacks have been dealt with
AuthenticationMiddleware
- After
SessionMiddleware
: uses session storage
- After
MessageMiddleware
- After
SessionMiddleware
: can use Session-based storage
- After
XViewMiddleware
TransactionMiddleware
- After MWs that use DB:
SessionMiddleware
(configurable to use DB) - Все
*CacheMiddleWare
не затронуты (исключение: использует собственный курсор БД)
- After MWs that use DB:
FetchFromCacheMiddleware
- After those those that modify 'Vary:' if uses them to pick a value for cache hash-key
- После
AuthenticationMiddleware
можно использоватьCACHE_MIDDLEWARE_ANONYMOUS_ONLY
FlatpageFallbackMiddleware
- Bottom: last resort
- Однако использование БД не является проблемой для
TransactionMiddleware
(да?)
RedirectFallbackMiddleware
- Bottom: last resort
- Однако использование БД не является проблемой для
TransactionMiddleware
(да?)
(Я буду добавлять предложения в этот список, чтобы собрать их все в одном месте)