django中配置使用websocket

Django 默认情况下并不支持 WebSocket,但你可以通过集成第三方库如 channels 来实现 WebSocket 功能。channels 是一个 Django 应用,它提供了对 WebSocket、HTTP2 和其他协议的支持。

下面是如何在 Django 项目中使用 WebSocket 的基本步骤:

一:安装 channels

首先,你需要安装 channels 和 channels-redis(用于消息传递):

pip install channels channels-redis

二:配置项目

在你的 settings.py 中,添加以下配置:

INSTALLED_APPS

INSTALLED_APPS = [

...

'channels',

]

Channels 配置

ASGI_APPLICATION = 'your_project.routing.application'

Channels layers 配置

CHANNEL_LAYERS = {

'default': {

'BACKEND': 'channels_redis.core.RedisChannelLayer',

'CONFIG': {

"hosts": [('127.0.0.1', 6379)],

},

},

}

三:创建路由

在 your_project 目录下创建一个名为 routing.py 的文件,并添加以下内容

from django.urls import path

from your_app.consumers import YourConsumer

websocket_urlpatterns = [

path('ws/your-path/', YourConsumer.as_asgi()),

]

四:创建 Consumer

在你的应用中创建一个名为 consumers.py 的文件,并添加一个Consumer

from channels.generic.websocket import AsyncWebsocketConsumer

import json

class YourConsumer(AsyncWebsocketConsumer):

async def connect(self):

当 WebSocket 连接建立时,此方法会被调用

await self.accept()

async def disconnect(self, close_code):

当 WebSocket 连接关闭时,此方法会被调用

pass

async def receive(self, text_data=None, bytes_data=None):

当从客户端接收到消息时,此方法会被调用

data = json.loads(text_data)

处理接收到的数据

pass

async def your_custom_method(self, data):

你可以定义自己的方法来处理特定逻辑

然后从其他地方调用这个方法

pass

async def send_message_to_client(self, message):

发送消息给客户端

await self.send(text_data=json.dumps(message))

五:前端连接 WebSocket

在前端,你可以使用原生的 WebSocket API 或其他库(如 socket.io)来连接你的 WebSocket 服务。以下是一个使用原生 API 的示例

const ws = new WebSocket('ws://your-domain/ws/your-path/');

ws.onopen = function(event) {

console.log("WebSocket 已连接");

ws.send(JSON.stringify({ your_data: 'here' }));

};

ws.onmessage = function(event) {

const data = JSON.parse(event.data);

console.log("接收到数据:", data);

};

ws.onclose = function(event) {

console.log("WebSocket 已关闭");

};

ws.onerror = function(error) {

console.error("WebSocket 错误:", error);

};

六:运行项目

使用 Daphne 或 Daphne + Runserver 运行你的项目:

daphne your_project.asgi:application

或python manage.py runserver

相关推荐
老胖闲聊43 分钟前
Python Copilot【代码辅助工具】 简介
开发语言·python·copilot
Blossom.1181 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
曹勖之1 小时前
基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
开发语言·python·机器人·ros2
lyaihao2 小时前
使用python实现奔跑的线条效果
python·绘图
ai大师3 小时前
(附代码及图示)Multi-Query 多查询策略详解
python·langchain·中转api·apikey·中转apikey·免费apikey·claude4
小小爬虾3 小时前
关于datetime获取时间的问题
python
蓝婷儿4 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
chao_7895 小时前
链表题解——两两交换链表中的节点【LeetCode】
数据结构·python·leetcode·链表
大霞上仙5 小时前
nonlocal 与global关键字
开发语言·python
Mark_Aussie6 小时前
Flask-SQLAlchemy使用小结
python·flask