Django + WebSocket + Redis 在线聊天室题文章

发布时间:2020-05-26 22:43:41 作者:xjtuhit
来源:网络 阅读:2503

话不多说先上效果图演示
Django + WebSocket + Redis 在线聊天室题文章

项目:http://112.74.164.107:9990/

1、安装组建

redis: yum install redis/apt install redis

2、创建虚拟化环境并进入

python3/python -m venv venv

source venv\bin\active

3、安装第三方库
pip install -r requirements.txt

4、初始化
python manage.py makemigrations

python manage.py migrate
python manage.py collectstatic

5、启动服务
gunicorn -w 5 -k gevent -b 0.0.0.0:9990 webchat.wsgi

6、访问

浏览器访问http://ip:9990

整个项目中涉及的思路和知识点我们在这里都一一分解为大家详细解说如下:

Django 基础

Django :一个可以使 Web 开发工作愉快并且高效的 Web 开发框架,能够以最小的代价构建和维护高质量的 Web 应用

框架:软件开发工程师从日常的重复劳动中总结出快速的、模块化的、安全的软件开发模式

Django 是 Python 开发者的最佳 Web 框架

MVC

Django + WebSocket + Redis 在线聊天室题文章

ORM

Object Relation Mapping (关系对象映射)

Mail (通过邮箱和验证码方式进行用户登录验证)

开发者可为使用 Django 提供的 send_mail 函数发送邮件

使用方法

配置邮箱(setting.py)

发送

send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)

注: django 发送邮件封装 python smtplib 模块,smtplib 使用方 法: https://github.com/imsilence/packages/blob/master/python/mailclient.py

Session & Cookie

实现用户认证机制

WebSocket 基础(实现服务端消息主动推送客户端)

是什么?

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议

为什么需要?

HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请

求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理

弊端: HTTP 协议无法实现服务器主动向客户端发起消息。

传统模式下, Web 应用程序通过频繁的 ajax 请求实现长轮询( 轮询是在 特定的时间间隔(如每1秒),由浏览器对服务器发出 HTTP 请求,然后由 服务器返回最新的数据给客户端的浏览器)

缺点:轮询的效率低,非常浪费带宽等资源(浏览器需要不断的向服务器

发出请求)

如何工作?

Web 浏览器和服务器都必须实现 WebSockets 协议来建立和维护连 接,由于 WebSockets 连接长期存在,与典型的 HTTP 连接不同,对 服务器有重要的影响(任何 WebSockets 服务器都需要实现为异步服 务器,基于多线程或多进程的服务器无法适用于 WebSockets,因为 它旨在打开连接,尽可能快地处理请求,然后关闭连接)

在 WebSocket 协议中, 浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章

如何使用?

客户端 API (javascript)

1、创建 websocket 对象
var ws = new WebSocket(url, [protocol] );

2、属性

ws.readyState 表示连接状态

可选值:

0: 表示连接尚未建立。
1: 表示连接已建立,可以进行通信。
2: 表示连接正在进行关闭。
3: 表示连接已经关闭或者连接不能打开。
ws.bufferedAmount 表示已被 send() 方法放入正在队列中等待传输,但是还没有发 出的 UTF-8 文本字节数

3、事件

4、方法
send ws.send() 使用连接发送数据

close ws.close() 关闭连接

dwebsocket 使用

dwebsocket 模块为 django 提供了 WebSocket 协议的实现

使用

1、安装
pip install dwebsocket

2、用法

使用 accept_websocket 或 require_websocket 装饰器修饰 view

获取 websocket 连接对象

获取数据

发送数据

其他

redis 基础

Redis 是一个开源的,基于内存的,可持久化的,K-V 数据库

用途:

发布订阅:是一种消息通信模式,发送者(pub)发送消息,缩 影订阅者(sub)都可以接收消息并处理
Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章

1、在 redis 客户端中使用

2、在 python 中使用

redis 模块

订阅

发布:

代码解读——项目启动

代码结构
Django + WebSocket + Redis 在线聊天室题文章

app 定义(app.py)
Django + WebSocket + Redis 在线聊天室题文章

配置(settings.py)

代码解读——用户认证流程

流程

1、打开登录页面

2、发送验证码

3、登录

路由(url.py)

Django + WebSocket + Redis 在线聊天室题文章

视图-view.py

Django + WebSocket + Redis 在线聊天室题文章

视图-models.py

Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章

视图-templates/login.html

Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章

代码解读——websocket 处理流程

流程

创建 websocket 连接到 msg/,同时注册 open, error, message 事件

当连接创建,调用 websocket.send 发送上线消息

用户填写消息,点击按钮,调用 websocket.send 方法发送聊天消息

urls.py 处理 url msg/ 到视图 msg

msg 视图接收和处理 websocket 消息,同时监听和处理 redis 订阅的 消息

获取 websocket 连接和发送消息(index.html)

Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章

路由处理(view.py)
Django + WebSocket + Redis 在线聊天室题文章

消息显示处理(index.html)
Django + WebSocket + Redis 在线聊天室题文章

代码解读——推出登陆流程

Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章
Django + WebSocket + Redis 在线聊天室题文章

想要源码的请留言或者私信博主

推荐阅读:
  1. 【MySQL】数据库闪回工具--binlog2sql
  2. 什么是Java、Python、JavaScript、PHP、C/C++编程语言

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python django redis

上一篇:php连接数据库类(后续再加)

下一篇:推荐一款可视化开发表单的java快速开发平台

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》