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

相关推荐
三天不学习4 分钟前
【入门教学】Python包管理与pip常用包
开发语言·python·pip
先做个垃圾出来………5 分钟前
3305. 元音辅音字符串计数
python
laplace012326 分钟前
LangChain 1.0 入门实战 · Part 6:LangChain Agent 中间件(Middleware)入门介绍
笔记·python·中间件·langchain·numpy·pandas
vibag37 分钟前
Parser输出解析器
python·语言模型·langchain·大模型
njsgcs1 小时前
基于vlm+ocr+yolo的一键ai从模之屋下载模型
人工智能·python·yolo·ocr·vlm
laplace01231 小时前
Part 4. LangChain 1.0 Agent 开发流程(Markdown 笔记)
前端·javascript·笔记·python·语言模型·langchain
TonyLee0171 小时前
测试数据集
python
啃火龙果的兔子1 小时前
Pyglet开发游戏流程详解
python·游戏·pygame
古城小栈1 小时前
PyO3 库全介绍
python·rust
技术工小李1 小时前
2026马年年会“接福袋”游戏
python