【问题标题】:Creating a notification system in Django在 Django 中创建通知系统
【发布时间】:2021-04-08 07:48:02
【问题描述】:

所以我正在使用 Django 和 Django REST 框架为网络论坛构建后端,并希望包含一个通知系统。

所以我有一个“讨论”模型:

def user_directory_path(instance, filename):
   return f'{instance.id}/{filename}'


class Discussion(models.Model):
    title = models.CharField(max_length=250)
    content = models.TextField(max_length=10000)
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)
    is_pinned = models.BooleanField(default=False)
    is_open = models.BooleanField(default=True)
    is_boosted = models.BooleanField(default=False)
    started_by = models.ForeignKey(to=User, related_name='started_discussions', on_delete=models.CASCADE)
    subscribers = models.ManyToManyField(to=User, related_name='subscribed_discussions')
    tools = models.ManyToManyField(to=Tool, related_name='belongs_to_channels', blank=True)
    channels = models.ManyToManyField(to=Channel, related_name='discussions')

    def __str__(self):
        return f'{self.id} | By: {self.started_by.username} | Content: {self.title} ...'

我有一个“评论”模型:

class Comment(models.Model):
    content = models.CharField(max_length=5000)
    discussion = models.ForeignKey(to=Discussion, related_name='comments', on_delete=models.CASCADE)
    written_by = models.ForeignKey(to=User, related_name='written_comments', on_delete=models.CASCADE)
    liked_by = models.ManyToManyField(to=User, related_name='liked_comments', blank=True)

    def __str__(self):
        return f'{self.id} | By: {self.written_by.username} | {self.content[0:30]} ...'

基本上我的问题是我想创建一个功能,如果有人在讨论中创建新评论,订阅此讨论的用户将收到通知。因此,例如,如果有人对您订阅的讨论发表评论,您将收到一条通知“来自 {user that commented} 对 {discussion you're subscribed to} 的新评论”

我的想法是创建一个新的 django 应用程序“通知”,其中包含相应的模型和序列化程序。但我真的不知道如何开始或实现它的最佳方法是什么?

希望我能够提供足够的信息供某人回答并提前非常感谢!

【问题讨论】:

标签: python django django-models django-rest-framework


【解决方案1】:

您应该查看 Django 频道和 websockets。当您连接到网站或向其发出请求时,您与网站的连接实际上被切断了,websocket 连接使 TCP 连接保持打开状态,这非常适合在发生特定事件时将事件从服务器发送到客户端。

Django channels 是 Django 对 websockets 的实现,在 Node 中例如使用 socket.io。

我还没有在任何项目中使用过这些渠道,所以我不想用我自己不知道的东西来误导你,但我知道你在这里寻找的是 websockets。

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2014-01-30
    • 2014-08-04
    • 2023-03-31
    相关资源
    最近更新 更多