Как создать django-сообщения StackOverflow?

Я хотел бы использовать модуль сообщений Django, однако я бы хотел, чтобы мои сообщения сохранялись до тех пор, пока пользователь не нажимает на X рядом с сообщением, а не на то, что сообщения исчезнут, как только пользователь перезагрузит страницу.

Я озадачен двумя проблемами: Как заставить обработчик контекста сообщений не удалять сообщения после их обращения? Как я могу позже удалить сообщение из БД, как только пользователь нажмет кнопку "удалить" (которая вызывает вызов ajax)?

Спасибо!

Ответ 1

В вашем случае django.contrib.messages не принесет вам ничего хорошего. Это система сообщений, вдохновленная системой флэш-памяти RoR, где сообщения не должны оставаться вокруг

Вы должны создать свою собственную систему обмена сообщениями (возможно, django-persistent-messages?), которая будет сохранять сообщения для зарегистрированных пользователей в базе данных.

  • Это довольно тривиальная задача для реализации
  • модель с внешним ключом для пользователя
  • обработчик контекста, чтобы сообщения были доступны в шаблонах
  • представление для потребления сообщения
  • возможно, вспомогательная функция для создания сообщений

Не забудьте сделать его доступным для других, если вы это сделаете =)

Ответ 2

Начиная с 1.2, Django имеет новую структуру сообщений - django.contrib.messages - теперь она полностью отделена от модуля auth и предлагает гораздо больше функциональности. Например, он обеспечивает базовый способ обработки истечения сообщений.

Вы также можете посмотреть приложение django-cnotes, которое предоставляет простую систему уведомлений пользователей на основе файлов cookie. Установка константы CNOTES_AUTO_CLEAR - False предотвращает автоматическую очистку заметок.

И есть django-notices, еще одна замена встроенной системы уведомлений о сообщениях. Это не волшебство, но обеспечивает элегантный и простой API.

Ответ 3

С конца 2010 года для этой цели есть библиотека django-persistent-messages. Он достаточно хорошо документирован и хорошо работает для создания системы обмена сообщениями типа Stack Overflow.

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

Ответ 4

Сообщения Django могут показаться хорошей отправной точкой, но требуют искажений, чтобы добраться туда, куда вы хотите пойти, и я не буду верить, что будущая версия Django не сломает ваши хаки.

Реализация собственной модели UserMessage, вероятно, послужит вам лучше в долгосрочной перспективе. Это дает вам полный, недвусмысленный контроль над жизненным циклом сообщений. Это может сделать приятное приложение многократного использования.