使用django实现stackoverflow的通知系统

eug*_*ene 7 django notifications

我已经看到类似于stackoverflow的Notify面板之类的问题.它谈到了实现的客户端.

我正在寻找有关服务器部分和网络部分的信息(如何实时通知客户端)

用户场景可能如下所示:

  1. 用户a发生了一些事情
  2. 服务器为DB中的user-a创建一条消息(持久性):我正在使用django-activity-stream
  3. 服务器向用户a的浏览器发送(新的或最后10个)消息(当用户登录或事件发生时)
  4. 浏览器显示消息(Notify面板类似于stackoverflow的部分)
  5. 如果用户确认该消息(在SO中单击收件箱),则所有未见的消息都被标记为已读并记录在服务器中

我对以下步骤有疑问.

  • (3)不确定,但可以使用https://github.com/stephenmcd/django-socketio.
  • (4)问题的答案是客户端具有从服务器接收的json数据.
    服务器是否为每个请求向用户发送消息?
    客户端是否检查本地存储(我是新手到网络,为此目的,什么是一个好的本地存储?)并请求json数据,如果他没有在本地存储中?
  • (5)我应该如何实现这个seenunseen?django-activity-stream没有它们的概念.

Ama*_*arg 5

这可以通过使用django-channels轻松实现。因为您需要 websockets 来进行双向客户端服务器通信。

显示通知是一种双向通信。服务器通知客户端有新的通知可用。客户端向用户展示这个通知,然后当用户与该通知进行交互时,客户端会通知服务器该通知已被读取,因此下次用户加载页面时,只会显示未读通知。

涉及到一些步骤。

  1. 您的服务器需要能够支持 websocket 通信。django-channel将应用程序转换为 ASGI。
  2. 创建一个可以向 websocket 发送和接收消息的 websocket 使用者。
  3. 当用户打开应用程序时,客户端会创建一个到服务器的 websocket 连接通道。
  4. 每当需要发送新通知时,服务器都会将消息发送到通道。
  5. 收到消息后,客户端使用 Javascript 在网页上呈现通知。像显示新消息图标,将新消息附加到消息列表等。

现在,完成了一部分。您的用户已收到通知。来到第二部分。

  1. 用户看到铃铛图标或其他任何东西,然后单击它,他会看到通知详细信息(这是由 js 呈现的,当客户端收到消息时)。
  2. 用户单击通知/铃铛图标。这时,客户端会向服务器发送一个通知,以便服务器可以更新所有已读取的通知。

我创建了一个应用程序,可以在显示新消息时更新客户端。Github 链接

你也可以参考一个类似的问题:https : //stackoverflow.com/a/55656848/4186008