热门推荐
实战 | 使用 Python 开发一个在线聊天室
2024-12-20 09:37

在线聊天室在如今的互联网是一个很常见的产品,在各类电商的网页客服中,我们都可以接触到在线聊天。还有一个培训机构,你一打开他的网页,立马就弹出一个在线聊天框,防不胜防。

今天州的先生给大家带了一个后端 Python + 前端 Vue 的小项目教程。

这个教程分为上中下三篇,其中:

非常适合学了 Django 之后写项目无从下手的朋友们。

本篇为上篇,我们将使用 Django 的传统开发模式借助视图和模板完成一个在线聊天室应用的开发。

最终效果如下所示:

直接开干吧!

为了不与计算机上现有的 Python 模块冲突,我们新起一个 Python 虚拟环境:

进入虚拟环境,然后激活它。

后端我们使用的是 Django3 框架(在本文编写时,Django 的最新版本为 3.2,所以我们不需要指定它的版本):

还有一个重要的依赖库——Channels。

Channels 封装了 Django 的原生异步视图支持,让 Django 项目不仅可以处理 HTTP,还可以处理需要长时间连接的协议,比如:WebSockets、MQTT、聊天机器人、业余无线电等等。

简而言之,就是为 Django 提供了异步和非 HTTP 处理的能力

因为 Channels 中的一个功能需要使用到 Redis 作为数据通道和缓存,所以我们得安装 Redis 以及其 Python 相关的包。

而 Redis 在 Windows 上没有官方的支持,所以在这里,州的先生使用一个 Redis 的替代品 Memurai 来当 Redis 使用:

安装完成后即会作为 Windows 的服务在后台启动。

然后安装 Channels 的 Redis 配套库:

安装好所有的依赖项之后,我们开始创建 Django 项目:

然后进入 chat_backend 目录,创建一个应用:

接着我们进行必要的配置,下述操作在 settings.py 文件中进行。

添加 channels、chat 应用到 Django 项目的应用列表:

在项目根目录下新建名为的文件夹,然后定义 HTML 模板路径:

然后指定 asgi 应用:

最后,指定 Channels 使用的数据通道后端,在这里我们使用的是 Redis:

其中主机地址和端口号填写 Redis 启动后显示的默认值。

在这个「在线聊天室」里面,一共有两个页面。一个是首页,用于输入房间号和用户名;另一个则是聊天房间的页面,用于进行聊天。

我们在 chat 应用的 views.py 下新建两个视图函数:

其中,视图函数返回 index.html,视图函数返回 room.html,这两个 HTML 文件需要我们在文件夹中进行创建。

视图函数创建好之后,我们为其绑定路由,在 chat 应用下新建一个名为的文件,在其中写入如下内容:

然后在 chat_backend 文件夹下的 urls.py 文件内引入 chat 应用的 url 配置:

至此,「在线聊天室」这个项目的 HTTP 部分已经完成了开发。

访问首页,会显示如下图所示的页面:

我们可以输入房间号和用户名进入房间,进入房间后的页面如下图所示:

但是现在我们还不能进行在线聊天,因为在线聊天最核心的部分——WebSocket后端,我们还没有编写。

WebSocket 是一个长连接的双向通信协议。通过 WebSocket 我们可以在客户端和服务器端之间建立实时的通信,而不是像 HTTP 那样,只有客户端发起,服务器端才会响应。

在这里,我们借助 Channels 在 Django 中实现 WebSocket。

首先,在 chat 应用下新建一个名为的文件(意为消费者,是 Channels 中的一个重要概念),在其中,我们引入 WebSocket 类:

然后继承这个类,新建一个名为的类,并在其中重写 WebSocket 的连接、关闭连接、消息接收等方法,代码如下所示:

最后,我们在 asgi 中重新声明路由。打开 chat_backend 目录下的 asgi.py 文件,将内容修改为如下所示:

如上代码所示,HTTP 通过 get_asgi_application 以传统的 HTTP 路由进行处理,而 WebSocket 则通过 Channels 的 URLRouter 进行处理。这样我们的项目启动之后就可以同时支持 HTTP 访问和 WebSocket 访问。

后端提供了 WebSocket 服务,前端需要进行连接和处理才行。

来看看前端的处理过程。

首先,通过 new 一个 对象,来创建 WebSocket连接:

然后编写 WebSocket 各类事件的回调函数:

这样前端就完成了对后端 WebSocket 的连接和消息接收。

运行项目,我们就可以在网页上进行实时在线聊天了。

当然,现在这个项目还有很多问题,比如:

接下来,让我们继续完善这个「在线聊天室」,敬请期待!

    以上就是本篇文章【实战 | 使用 Python 开发一个在线聊天室】的全部内容了,欢迎阅览 ! 文章地址:http://fabua.ksxb.net/quote/4255.html 
     动态      相关文章      文章      同类文章      热门文章      栏目首页      网站地图      返回首页 海之东岸资讯移动站 http://fabua.ksxb.net/mobile/ , 查看更多