Django - отъезд сообщений (офлайновым) пользователям, использующим новую платформу сообщений

Так message_set удерживается от использования в пользу новой платформы сообщений. Старое доброе message_set разрешенный меня для отъезда сообщений офлайновым пользователям (например, когда я делаю некоторый материал в задании крона, я могу хотеть уведомить некоторого пользователя об этом). Теперь возьмите взгляд на новую платформу, и кажется, что сообщение может только быть добавлено к request объект.

Скучайте по мне что-либо, или функциональность добавления сообщения к a user объект, который уводят, который означает, что я должен буду прокрутить свое собственное?

5
задан Peter Mortensen 1 September 2010 в 19:49
поделиться

2 ответа

Не похоже, что ты что-то упускаешь. Функциональность добавления сообщений к объекту user будет устарела в Django 1.2, а полностью удалена в 1.4 (из документации по аутентификации django здесь). И ни один из новых бэкэндов хранилища сообщений не будет предварительно прокручен для постоянных (например, базы данных или файлового хранилища) сообщений.

Но все не будет потеряно. Я не вижу ничего в коде нового бэкэнда хранилища сообщений, что настаивало бы на том, чтобы при хранении сообщения вы предоставили правильный запрос (так что хранение сообщения, например, от задания cron, сработает). На вашем месте я бы свернул свой собственный бэкэнд, который хранит сообщения в таблице базы данных.

Edit: Как вы можете это реализовать

Если вы не возражаете против реализации автономного хранения сообщений в качестве дополнения к одному из новых бэкэндов для обмена сообщениями, то один из возможных подходов:

  1. Определить сообщение Model

    class UserMessage(models.Model):
     user = models.ForeignKey('auth.User').
     сообщение = models.CharField(max_length=200)
     create = models.DateTimeField(auto_now_add=True)
    
  2. Создайте вручную UserMessages из задания cron

    def some_func_in_my_cron_job():
     ...
     UserMessage.create(user=some_user, message="Что-то случилось")
     ...
    
  3. Определите новый механизм хранения сообщений, переопределив один из существующих механизмов, и переопределите _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
    
  4. Включите новый механизм сообщений в настройках:

    MESSAGE_STORAGE = 'myproj.custom_message_storage.MyStorageEngine'.
    

При таком подходе вы не будете писать в бэкэнд своей базы данных с помощью новой системы обмена сообщениями api, но с ее помощью вы можете читать сообщения, заданные вручную. Надеюсь, это поможет.

9
ответ дан 18 December 2019 в 11:57
поделиться

Документы требуются 4 различных хранения двигателей. Двигатель FallcackStorage Engine пишет на сеанс.

0
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: