python - 如何让接收器在 Django 中监听用户特定的信号?
问题描述
我正在写一个 Django 博客站点,其中博客帖子需要经过管理员(超级用户)的批准才能发布。在我的 BlogPost 模型中,有一个布尔字段“已批准”。
我已经设法实现了所有这些。但是,我还希望在用户的帖子获得批准时通知用户(通过 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中。但是,这意味着我无权访问当前登录的用户,除非我将其设为本地功能。第二个是我也不知道要为消息调用提出什么请求。
任何关于我如何进行这项工作的建议将不胜感激。谢谢!
解决方案
首先,您应该知道许多用户可能已登录并使用您的页面。如果你想找到导致这种变化的用户,你应该在你的模型中添加一个字段来记录你的视图函数中的用户 ID。
如果你想给一个作家用户发送通知,你应该在你的模型中添加一个新表并记录用户的通知,并添加 start_time 和 expire_time。例如,如果您的用户看到任何页面,您可以在此页面上显示未过期的通知。尽管更好的解决方案是使用套接字并在所有页面上与服务器通信。
推荐阅读
- python-3.x - 使用带有多个参数的 pandas.apply 以返回多个列
- php - 如果数组键与 mysqli 结果中的日期匹配,则赋值
- mysql - SQL:查询获取特定组的所有用户以及所有组的每个用户
- windows - 如何创建自定义替代代码或修改现有代码?
- r - 在 R Shiny 中,使用 textOutput 动态填充下载按钮的标签
- python - Azure 转录 json 到 pandas df
- json - 如何在 ARM 模板中将参数与字符串值连接:无法解析模板语言表达式
- bash - 如何将 exe 输出分配给 gitlab ci 脚本中的变量?
- bash - 使用 gpg 格式以编程方式验证校验和
- algorithm - 证明归并排序使用的比较次数是单调递增的(C(N+1) > C(N) for all N > 0)