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

相关推荐
AI逐月23 分钟前
解决 ComfyUI 插件安装后 Nanobind 报错问题:soxr 版本冲突原理解读
开发语言·python
AC赳赳老秦23 分钟前
Windows 系统 OpenClaw 执行策略报错及管理员权限设置深度解析与实操指南
运维·人工智能·python·django·自动化·媒体·openclaw
软件开发技术深度爱好者41 分钟前
用python + pillow实现GUI界面图片GUI处理工具
开发语言·python
FreakStudio1 小时前
ESP32 实现在线动态安装库和自动依赖安装-使用uPyPI包管理平台
python·单片机·嵌入式·面向对象·电子diy·sourcetrail
别抢我的锅包肉1 小时前
【FastAPI】 响应类型详解:从默认 JSON 到自定义响应
python·fastapi
智算菩萨1 小时前
【Tkinter】15 样式与主题深度解析:ttk 主题系统、Style 对象与跨平台样式管理实战
开发语言·python·ui·ai编程·tkinter
weixin_419349792 小时前
Python 项目中生成 requirements.txt 文件
开发语言·python
第一程序员2 小时前
Python与区块链:非科班转码者的指南
python·github
liu****2 小时前
LangChain-AI应用开发框架(六)
人工智能·python·langchain·大模型应用·本地部署大模型
witAI2 小时前
**AI仿真人剧制作2025推荐,专业团队与创新技术引领未来**
人工智能·python