Django: отправка уведомлений пользователю на основе изменений в базе данных

У меня есть 3 таблицы базы данных:

  • users (хранит информацию о пользователях, например, email, имя)
  • метаданные (хранит данные)
  • activity (хранит изменения, внесенные в таблицы пользователей/метаданных)

Я хочу добиться следующего:

  • для хранения любых изменений в таблице активности (например, создан новый пользователь, пользователь обновляет таблицу метаданных)
  • посылать уведомления пользователям, когда происходит изменение в таблицах пользователей/метаданных.

Какие библиотеки/метод я мог бы использовать для достижения желаемого функционала? Спасибо!

В дополнение к django signals, который мы уже рекомендовали, вы также можете посмотреть django channels + django activity stream

Предполагая, что вы используете Django Models, я бы использовал Django Signals для сохранения данных во второй модели: "MetaData" в соответствии с вашим вопросом.

В частности, сигнал post_save:

https://docs.djangoproject.com/en/4.0/ref/signals/#django.db.models.signals.post_save

@receiver(post_save, sender=User)
def post_save_user(sender, instance, created, **kwargs):
    # Save Stuff To Metadata Model.
    meta = MetaData(user=instance)
    meta.save()

Вам нужно импортировать эти сигналы внутрь вашего models.py, размещенного в нижней части файла.


Что касается уведомлений, я бы последовал совету @kristina и использовал Django Channels.

Напоминаю, что ваше приложение должно быть ASGI (Async). Поэтому ваш сервер приложений должен быть таким, как uvicorn, daphne, hypercorn и т.д.

Вернуться на верх