Created
November 15, 2010 05:18
-
-
Save ericflo/700073 to your computer and use it in GitHub Desktop.
Message backend which spits out dictionaries able to be json encoded/decoded, for those session backends which do not pickle.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.contrib.messages.storage.base import Message, BaseStorage | |
class JSONSessionStorage(BaseStorage): | |
""" | |
Stores messages in JSON-compatible format | |
""" | |
session_key = '_messages' | |
def _to_dict(self, message): | |
return { | |
'level': message.level, | |
'message': message.message, | |
'extra_tags': message.extra_tags, | |
} | |
def _from_dict(self, message): | |
return Message(**message) | |
def __init__(self, request, *args, **kwargs): | |
assert hasattr(request, 'session'), "The session-based temporary "\ | |
"message storage requires session middleware to be installed, "\ | |
"and come before the message middleware in the "\ | |
"MIDDLEWARE_CLASSES list." | |
super(JSONSessionStorage, self).__init__(request, *args, **kwargs) | |
def _get(self, *args, **kwargs): | |
""" | |
Retrieves a list of messages from the request's session. This storage | |
always stores everything it is given, so return True for the | |
all_retrieved flag. | |
""" | |
messages = self.request.session.get(self.session_key) | |
messages = map(self._from_dict, messages or []) | |
return messages, True | |
def _store(self, messages, response, *args, **kwargs): | |
""" | |
Stores a list of messages to the request's session. | |
""" | |
if messages: | |
messages = map(self._to_dict, messages) | |
self.request.session[self.session_key] = messages | |
else: | |
self.request.session.pop(self.session_key, None) | |
return [] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment