首页 > 解决方案 > 在 Django 中向特定用户发送通知

问题描述

我在处理 Django 项目(创建和安排会议)时有点卡住了。我需要你的帮助!

对于该项目,我想向会议创建者选择的用户发送通知(可能会弹出一个通知,因为我在注册时没有实施电子邮件)。他们第一次登录时会收到通知。我查看了 Django 的消息传递框架,但似乎他们没有我正在寻找的方法。我对 Django 也很陌生,所以我真的需要你的帮助!任何建议,将不胜感激!

标签: pythondjangodjango-modelsdjango-viewsmessage-queue

解决方案


您需要一个识别通知的模型。

class Notification(models.Model):
    created = models.DateTimeField(auto_add_now=True)
    updated = models.DateTimeField(auto_now=True)
    text = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    read = models.DateTimeField(null=True, blank=True)

您可以在应用程序中的任何位置为用户创建许多通知。

如果您需要在任何页面上显示它们,最好将它们拉到上下文处理器中。如果它仅在特定页面上,我会将它们添加到该视图的模板渲染上下文中。

至于将它们标记为已读,您需要做出决定。您可以选择在将它们呈现给用户时将它们标记为已读,这与您在上述任何一种情况下拉取它们同时发生。或者您可以强制用户关闭它们,然后将其标记为已读。如果您这样做,您将需要一个带有通知 id 或其他标识符的 ajax 视图,验证请求用户与通知的用户匹配并设置read=django.utils.timezone.now()

编辑:

重新阅读问题,这是一个更合适的答案:

class Notification(models.Model):
    created = models.DateTimeField(auto_add_now=True)
    text = models.TextField()
    users = models.ManyToManyField(User, through='NotificationUser')

class NotificationUser(models.Model):
    created = models.DateTimeField(auto_add_now=True)
    updated = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    notification = models.ForeignKey(User, on_delete=models.CASCADE)
    read = models.DateTimeField(null=True, blank=True)

这样,您可以拥有一个具有文本(或创建者)等属性的通知实例。然后具有通知用户特定的属性,例如该特定用户是否已阅读/看到通知。编辑:我重新阅读了您的问题,它说要向多个用户发送通知。在那种情况下,这样的事情可能会更好。


推荐阅读