Make changes to your settings:
- Add 'offline_messages' to INSTALLED_APPS
- Set MESSAGE_STORAGE to 'offline_messages.storage.OfflineStorageEngine'
This is a slightly modified version of the excellent and simple offline_messages package. It includes generic foreign keys plus extra meta information. This is a specific implementation for Zapier as we have tons of feedback points, but its easy to confuse the bejesus out of our customers because important error messages disappear for good.
So basically this adds:
- Persistent history of messages.
- Generic foreign keys to attach messages to specific objects (any model, any record).
- The ability to store even more meta data (EG: the parameters that caused the message).
Enjoy!
You can continue to use the standard Django message system as desired. Messages created like:
from django.contrib import messages
messages.add_message(request, messages.INFO, 'Hello world.')
Will work just fine. However, if you'd like to create an offline message, do something like this:
from offline_messages.utils import create_offline_message, constants
create_offline_message(User.objects.get(id=1), "Hello there!", level=constants.WARNING)
Or like this:
from offline_messages.models import OfflineMessage
OfflineMessage.objects.create(user=User.objects.get(id=1), level=20, message='Hello world.')
Usage example from the real life:
# Iterate through users for user in User.objects.all(): already_notified = OfflineMessage.objects.filter(user=user, message=message).exists() if not already_notified: create_offline_message(user, message, level=constants.WARNING)
The idea behind utils is you can just do:
from offline_messages import utils as messages
In place of:
from django.contrib import messages
And still have access to boring old messages.success(request, 'Good job!') but also have access to be able to do things like...
comment = Comment.objects.create(title='A test', message='Thanks!')
messages.success(request, 'Comment posted!', content_object=comment, meta={'blah': 'blah'})