Django异步发送通知

4

当管理员向用户添加通知时,我希望向用户发送通知,并在用户的主页上显示类似Facebook点赞或活动动态的通知。在Django中是否可以实现这一功能?

models.py

(无需翻译)
class Notification(BaseModel):
    created_user = models.ForeignKey(User)
    title = models.CharField(max_length=225)
    description = models.TextField(max_length=600)
    is_read = models.BooleanField(default=False)
    priority = models.CharField(max_length=20, choices=NOTIFICATION_STATUS, default=LOW)

    def __str__(self):
        return self.title

我可以添加新的通知,但当用户刷新页面时,通知列表不会更新。我希望像 Facebook 那样异步实现。


1
查阅消息框架https://docs.djangoproject.com/en/1.11/ref/contrib/messages/,如果想要像Facebook一样实现,则需要通过JavaScript / Ajax请求来完成,或者等待用户刷新页面。 - warath-coder
1个回答

3

Channels是解决这个问题的最佳方案。它支持websocket和真正的异步,并且能够实时连接前端和后端进行同步。

base.html

socket = new WebSocket("ws://" + window.location.host + "/notification/");
socket.onmessage = function(e) {
    notificationElement.innerHtml = e.data
}

models.py

@receiver(post_save, sender=Notification)
def notification_handler(sender, instance, **kwargs):
    Group("notification").send({
        "text": "This is the new notification",
    })

@RajaSimon,我来晚了,但你能详细解释一下这个答案吗?我正在尝试实现它,但不确定我缺少哪些部分。我正在使用通道,以便用户可以在线程中私密聊天。为使其正常工作,视图需要是什么样子的? - Trilla
@Trilla,我不确定你当前的代码库。但是要始终像“组”模式一样思考。 - Raja Simon
你和你的朋友正在聊天,现在把它看作是一个“群组”。 - Raja Simon
从高层次来看,就像当您和您的朋友建立某种连接时,服务器必须创建该组(可能需要为组ID和消息实现数据库)。如果我了解您的业务逻辑,我可以进行更详细的解释。 :) - Raja Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接