Practiaal rules for Django MiddleWare ordering?
Posted
by
o_O Tync
on Stack Overflow
See other posts from Stack Overflow
or by o_O Tync
Published on 2011-01-08T04:26:17Z
Indexed on
2011/01/08
21:53 UTC
Read the original article
Hit count: 381
django
|django-middleware
The official documentation is a bit messy: 'before' & 'after' are used for ordering MiddleWare in a tuple, but in some places 'before'&'after' refers to request-response phases. Also, 'should be first/last' are mixed and it's not clear which one to use as 'first'.
I do understand the difference.. however it seems to complicated for a newbie in Django.
Can you suggest some correct ordering for builtin MiddleWare classes (assuming we enable all of them) and — most importantly — explain WHY one goes before/after other ones?
here's the list, with the info from docs I managed to find:
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
- After
UpdateCacheMiddleware: Modifies 'Vary:'
ConditionalGetMiddleware- Before
CommonMiddleware: uses its 'Etag:' header whenUSE_ETAGS=True
- Before
SessionMiddleware- After
UpdateCacheMiddleware: Modifies 'Vary:' - Before
TransactionMiddleware: we don't need transactions here
- After
LocaleMiddleware, One of the topmost, after SessionMiddleware, CacheMiddleware- After
UpdateCacheMiddleware: Modifies 'Vary:' - After
SessionMiddleware: uses session data
- After
CommonMiddleware- Before any MW that may change the response (it calculates ETags)
- After
GZipMiddlewareso it won't calculate an E-Tag on gzipped contents - Close to the top: it redirects when
APPEND_SLASHorPREPEND_WWW
CsrfViewMiddlewareAuthenticationMiddleware- After
SessionMiddleware: uses session storage
- After
MessageMiddleware- After
SessionMiddleware: can use Session-based storage
- After
XViewMiddlewareTransactionMiddleware- After MWs that use DB:
SessionMiddleware(configurable to use DB) - All
*CacheMiddleWareis not affected (as an exception: uses own DB cursor)
- After MWs that use DB:
FetchFromCacheMiddleware- After those those that modify 'Vary:' if uses them to pick a value for cache hash-key
- After
AuthenticationMiddlewareso it's possible to useCACHE_MIDDLEWARE_ANONYMOUS_ONLY
FlatpageFallbackMiddleware- Bottom: last resort
- Uses DB, however, is not a problem for
TransactionMiddleware(yes?)
RedirectFallbackMiddleware- Bottom: last resort
- Uses DB, however, is not a problem for
TransactionMiddleware(yes?)
(I will add suggestions to this list to collect all of them in one place)
© Stack Overflow or respective owner