Как я могу заставить приемник слушать сигнал, специфичный для пользователя, в Django?

Я пишу Django блог-сайт, где записи в блоге должны быть одобрены администратором (суперпользователем), прежде чем они могут быть опубликованы. В моей модели BlogPost есть булево поле "approved".

Мне удалось реализовать все это. Однако, я также хочу, чтобы пользователь получал уведомление (через сообщение django), когда его сообщение одобрено. (Пользователь может пойти и делать все остальное, что он хочет в промежутке, прежде чем администратор придет к одобрению его сообщения, и поэтому сообщение должно появляться на той странице, на которой пользователь находится в данный момент. Более того, если у пользователя одновременно открыто несколько страниц (скажем, на разных вкладках), сообщение должно появиться на всех из них). Именно с реализацией этого у меня и возникли некоторые проблемы. Я составил небольшой фрагмент кода, в котором отражено то, что я хочу сделать.

@receiver(post_save, sender=BlogPost)
def message_on_approve(sender, instance, **kwargs):
    if instance.user != (the current user who is logged in): return
    if instance.approved:
        messages.success((request, to be sent to the page user is currently on), 'Your post has been approved!')
    else:
        messages.error((the same request), 'Your post has not been approved.')

Сейчас я столкнулся с двумя проблемами. Во-первых, из-за того, что мне нужно знать, какой пользователь вошел в систему, фрагмент кода кажется, что он должен находиться в моем файле views.py. Однако это означает, что у меня нет доступа к тому, какой пользователь в данный момент вошел в систему, если только я не сделаю это локальной функцией. Во-вторых, я также не знаю, какой запрос нужно вставить для вызова сообщения.

Любой совет о том, как я могу сделать так, чтобы это работало, будет очень признателен. Спасибо!

Во-первых, вы должны знать, что многие пользователи могут войти в систему и использовать вашу страницу. если вы хотите найти пользователя, который вызывает это изменение, вы должны добавить поле в вашу модель для записи идентификатора пользователя в вашей функции представления.

Если вы хотите отправить уведомление пользователю writer, вам следует добавить новую таблицу в вашу модель и записать уведомление пользователя, а также добавить start_time и expire_time. например, если пользователь видит любую страницу, вы можете показать не истекшие уведомления на этой странице. Хотя лучшим решением является использование сокета и взаимодействие с сервером на всех страницах.

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