Source code for djem.middleware

from django.conf import settings
from django.contrib.messages.storage import default_storage
from django.contrib.messages.storage.base import BaseStorage


class MemoryStorage(BaseStorage):
    """
    A messages framework storage backend that does not implement any persistent
    storage of the messages added to it. Messages are stored in memory only -
    if they are not read within the same request, they are lost.
    """
    
    def _get(self, *args, **kwargs):
        
        return None, True
    
    def _store(self, messages, response, *args, **kwargs):
        
        return []


[docs]class MessageMiddleware: """ 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. """ def __init__(self, get_response): self.get_response = get_response def __call__(self, request): is_ajax = request.headers.get('x-requested-with') == 'XMLHttpRequest' if is_ajax: request._messages = MemoryStorage(request) else: request._messages = default_storage(request) response = self.get_response(request) # # The following is copied verbatim from Django's own MessageMiddleware # (apart from the pragma) # # A higher middleware layer may return a request which does not contain # messages storage, so make no assumption that it will be there. if hasattr(request, '_messages'): # pragma: no cover unstored_messages = request._messages.update(response) if unstored_messages and settings.DEBUG: raise ValueError('Not all temporary messages could be stored.') return response