Skip to content

Instantly share code, notes, and snippets.

@efojs
Last active March 21, 2021 19:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save efojs/3e7006a59a9fb5490ed336e1c09ff6e9 to your computer and use it in GitHub Desktop.
Save efojs/3e7006a59a9fb5490ed336e1c09ff6e9 to your computer and use it in GitHub Desktop.
Custom AJAX storage for Django's messages framework
MESSAGE_STORAGE = 'PROJECT_NAME.storage.CustomAjaxStorage'
# Pass messages to client in AJAX response
# _is_ajax check relies on X-Requested-With: XMLHttpRequest header
import json
from django.contrib.messages.storage.fallback import FallbackStorage
class CustomAjaxStorage(FallbackStorage):
"""
If request is AJAX add messages to response content.
Otherwise pass to FallbackStorage
"""
def _is_ajax(self, request):
if request.headers.get('x-requested-with') == 'XMLHttpRequest':
return True
else:
return False
def _store(self, messages, response, *args, **kwargs):
if self._is_ajax(self.request):
if response.content:
response_content = json.loads(response.content)
else:
response_content = {}
response_content['messages'] = []
for message in messages:
response_content['messages'].append({
'message': message.message,
'tags': message.tags
})
response.content = json.dumps(response_content)
else:
return super(CustomAjaxStorage, self)._store(messages, response, *args, **kwargs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment