Так message_set
удерживается от использования в пользу новой платформы сообщений. Старое доброе message_set
разрешенный меня для отъезда сообщений офлайновым пользователям (например, когда я делаю некоторый материал в задании крона, я могу хотеть уведомить некоторого пользователя об этом). Теперь возьмите взгляд на новую платформу, и кажется, что сообщение может только быть добавлено к request
объект.
Скучайте по мне что-либо, или функциональность добавления сообщения к a user
объект, который уводят, который означает, что я должен буду прокрутить свое собственное?
Не похоже, что ты что-то упускаешь. Функциональность добавления сообщений к объекту user
будет устарела в Django 1.2, а полностью удалена в 1.4 (из документации по аутентификации django здесь). И ни один из новых бэкэндов хранилища сообщений не будет предварительно прокручен для постоянных (например, базы данных или файлового хранилища) сообщений.
Но все не будет потеряно. Я не вижу ничего в коде нового бэкэнда хранилища сообщений, что настаивало бы на том, чтобы при хранении сообщения вы предоставили правильный запрос (так что хранение сообщения, например, от задания cron, сработает). На вашем месте я бы свернул свой собственный бэкэнд, который хранит сообщения в таблице базы данных.
Edit: Как вы можете это реализовать
Если вы не возражаете против реализации автономного хранения сообщений в качестве дополнения к одному из новых бэкэндов для обмена сообщениями, то один из возможных подходов:
Определить сообщение Model
class UserMessage(models.Model):
user = models.ForeignKey('auth.User').
сообщение = models.CharField(max_length=200)
create = models.DateTimeField(auto_now_add=True)
Создайте вручную UserMessages из задания cron
def some_func_in_my_cron_job():
...
UserMessage.create(user=some_user, message="Что-то случилось")
...
Определите новый механизм хранения сообщений, переопределив один из существующих механизмов, и переопределите _get()
из django.contrib.messages.storage.session import SessionStorage.
класс MyStorageEngine (SessionStorage):
def _get(self, *args, **kwargs):
если hasattr(self.request, "user") и self.request.user.is_authenticated():
offline_messages = UserMessage.objects.filter(user=self.request.user)
# и удалить сообщения из базы данных
Иначе:
offline_messages = Нет
other_messages = super(MyStorageEngine, self)._get(*args, **kwargs)
# all_messages = объединить offline_messages и other_messages
возвращать all_messages
Включите новый механизм сообщений в настройках:
MESSAGE_STORAGE = 'myproj.custom_message_storage.MyStorageEngine'.
При таком подходе вы не будете писать в бэкэнд своей базы данных с помощью новой системы обмена сообщениями api, но с ее помощью вы можете читать сообщения, заданные вручную. Надеюсь, это поможет.
Документы требуются 4 различных хранения двигателей. Двигатель FallcackStorage
Engine пишет на сеанс.