Как создать 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, вероятно, послужит вам лучше в долгосрочной перспективе. Это дает вам полный, недвусмысленный контроль над жизненным циклом сообщений. Это может сделать приятное приложение многократного использования.