.. module:: djem.middleware
.. versionadded:: 0.6
Middleware that handles temporary messages, differentiating between those added as part of an AJAX request vs those that are not. Different storage backends are used for each: the default backend (configurable via MESSAGE_STORAGE
) for standard requests and a custom memory-only backend for AJAX requests.
Using a memory-only backend, which does not offer any persistence between requests, prevents simultaneous AJAX requests interfering with each other's message stores, avoiding the documented caveat of Django's out-of-the-box messages framework.
This is a drop-in replacement for Django's own MessageMiddleware
:
# before
MIDDLEWARE = [
...
'django.contrib.messages.middleware.MessageMiddleware'
...
]
# after
MIDDLEWARE = [
...
'djem.middleware.MessageMiddleware'
...
]
Important
MessageMiddleware
uses the HttpRequest
object's is_ajax()
method to differentiate between AJAX and non-AJAX requests. An XMLHttpRequest
call must use the appropriate headers in order to be correctly detected.
.. seealso:: :class:`~djem.ajax.AjaxResponse` An extension of Django's ``JsonResponse`` that, among other things, will automatically include any messages that are in the message store as part of the response.