在上一篇文章中,我们借助 Django 3 + Channels + Redis(Memurai ) 实现了一个网页在线聊天室。
但是这个聊天室的功能还稍显简陋:
今天咱们就来把保存和漫游聊天记录这一功能实现了。
首先,在 chat 应用下的 models.py 文件中定义一个聊天消息类:
然后执行迁移命令以在数据库中生成数据表:
有了聊天记录表之后,对于漫游聊天记录的过程就很简单了:
我们首先来处理数据的入库。
之前的代码中,我们在 chat 应用中的 consumers.py 文件中通过 ChatConsumer 这个类来实现 WebSocket 的所有处理。
后端在接收到消息之后直接将消息推送给了对应房间号,现在我们需要加上数据存储的步骤。
首先,在 ChatConsumer 类中新建一个名为 save_msg() 的方法,在这个方法里面我们接收「用户名」、「房间号」、「消息」三个参数,然后将其写入到 Message 数据模型中:
sync_to_async 装饰器用于将同步方法转换为异步方法,需要在文件头部引入:
保存消息的方法创建好之后,我们在 ChatConsumer 类的 receive() 方法中间进行调用:
这样,WebSocket 在接收到消息之后,会首先将消息存储到数据库,再推送出去。
数据库中有了数据,数据的查询就好办了。
我们在聊天室的视图函数中对指定房间号的历史消息进行查询(chat/views.py):
前端渲染聊天记录
我们现在可以在前端 HTML 模板中渲染聊天记录了。
相关代码如下所示:
这样,我们在进入到指定房间的页面后,就会把历史聊天消息给漫游同步。
最终效果如下所示:
在本篇文章中,我们通过 Django 的数据模型实现了聊天室的聊天记录漫游。
在接下来的文章中,我们还将继续对这个使用 Python 开发的在线聊天室进行开发和优化。
比如:
敬请期待!