Как в Django реализовать уведомление пользователя о новом входящем сообщении?
Здравствуйте! Подскажите в каком направлении двигаться, чтобы реализовать уведомление пользователя о новом входящем личном сообщении? Есть простенькая модель с полями "Отправитель-Получатель-Тема-Текст_Сообщения", во вьюхе для каждого конкретного пользователя реализована возможность видеть все входящие сообщения от всех других пользователей, возможность видеть все исходящие, возможность видеть личную переписку конкретного пользователя с конкретным получателем и т.д. Все простенькое, без всяких web-socket и django-channel (я до них не дорос еще).
Так вот, вопрос собственно возможно ли при такой модели как то прописать возможность, чтобы пользователь узнавал о новых входящих, например, чтобы появлялось какое то уведомление рядом с кнопкой "сообщения"? Уведомление по емайлу не интересно - это я уже реализовал.
Без channels в режиме реального времени нельзя. При обновлениях страницы пользователем можно. Для этого надо либо хранить последнее прочитанное пользователем сообщение, делать выборку более новых и показывать их количество, либо завести новую модель типа Notification и при отправке сообщения пользователю создавать эти Notification, а при обновлении страницы показывать их и тут же удалять. Ну и в обоих случаях можно добавить костылик в виде периодических ajax-запросов для получения информации о новых сообщениях, для иллюзии интерактивности. Только надо понимать, что поллинг может создать значительную нагрузку на сервер даже от незначительного количества пользователей.
А если рассматривать первый вариант - как Джанго будет понимать, что это сообщение было прочитано пользователем, а другое - нет? Какая часть документации описывает такое поведение?
Сергей Горностаев, не совсем понятно как Django должен понимать, что вот это конкретное сообщение - прочитано, а вот следующее после него - еще не прочитано.
И еще дополнительный вопрос -можно ли тут использовать сигналы django.db.models.signals.post_save ?
Fedor_PV, это зависит от того, как именно реализован у вас пользовательский интерфейс чтения сообщений. От примитивного варианта "что выбрано из базы, то прочитано", до вариантов вида "окно сообщения открыто, значит прочитано" или "фокус на элементе списка сообщений удерживался более 5 секунд, значит прочитано".
Сергей Горностаев, у меня когда окно нового сообщения открыто - снизу выводится весь список ранних сообщений с этим пользователем. Во вьюхе это достигается классом CreateView для формы нового сообщения, а список ранних сообщений передается через метод get_context_data класса CreaveView в шаблон с формой для нового сообщения. В итоге шаблон отражает и форму ввода нового сообщения и все прошлые сообщения снизу. По идее когда открыто окно нового сообщения и видны все прошлые сообщения - можно считать, что все они прочитаны. Как дальше действовать?