【问题标题】:How can I make a receiver listen to a user-specific signal in Django?如何让接收器在 Django 中监听用户特定的信号?
【发布时间】:2021-08-22 19:44:04
【问题描述】:

我正在编写一个 Django 博客站点,其中博客帖子需要经过管理员(超级用户)的批准才能发布。在我的 BlogPost 模型中,有一个布尔字段“已批准”。

我已经设法实现了所有这些。但是,我还希望在用户的帖子获得批准时通知用户(通过 django 消息)。 (在管理员批准他们的帖子之前,用户可以在此期间做任何他们想做的事情,因此消息必须出现在用户当前所在的任何页面上。此外,如果用户在同时(例如,在不同的选项卡上),消息应该出现在所有选项卡上。)这就是我在实施时遇到的一些问题。我已经起草了一个小代码 sn-p 封装了我想做的事情。

@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.')

我现在面临两个问题。首先,由于我需要知道哪个用户已登录,因此代码 sn-p 似乎应该放在我的 views.py 中。但是,这意味着我无权访问当前登录的用户,除非我将其设为本地功能。第二个是我也不知道要为消息调用提出什么请求。

任何关于我如何进行这项工作的建议都将不胜感激。谢谢!

【问题讨论】:

    标签: python django django-views django-messages


    【解决方案1】:

    首先,您应该知道许多用户可能已登录并使用您的页面。如果你想找到导致这种变化的用户,你应该在你的模型中添加一个字段来记录你的视图函数中的用户 ID。

    如果你想给一个作家用户发送一个通知,你应该在你的模型中添加一个新表并记录用户的通知,并添加start_time和expire_time。例如,如果您的用户看到任何页面,您可以在此页面上显示未过期的通知。虽然更好的解决方案是使用套接字并在所有页面上与服务器通信。

    【讨论】:

      猜你喜欢
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      相关资源
      最近更新 更多