5 分钟快速上手 djangochannelsrestframework:从 pip install 到你的第一个 WebSocket 实时接口
【免费下载链接】djangochannelsrestframeworkA Rest-framework for websockets using Django channels-v4项目地址: https://gitcode.com/gh_mirrors/dj/djangochannelsrestframework
如果你正在寻找一个能像Django REST Framework(DRF)一样优雅地开发WebSocket 实时接口的方案,那么djangochannelsrestframework正是你需要的工具。这是一个基于Django Channels v4的 REST 风格 WebSocket 框架,让你用熟悉的 DRF 套路(序列化器、权限、mixin)快速构建实时 API,前后端数据推送从此不再手忙脚乱。本文带你用 5 分钟完成从安装到跑通第一个实时接口的全过程。
📌 先认识 djangochannelsrestframework
djangochannelsrestframework(简称DCRF)解决的问题很直接:HTTP 接口是"一问一答",而 WebSocket 是"实时双向"。DCRF 把 DRF 的开发体验带进了 WebSocket 世界,核心亮点包括:
- 🧩DRF 风格开发:复用你熟悉的
queryset、serializer_class、permission_classes写法 - ⚡Async 原生支持:基于
AsyncAPIConsumer构建,天然适配高并发实时场景 - 🔄CRUD 一键生成:内置
ListModelMixin、CreateModelMixin等,秒建完整 REST 风格动作 - 👀模型实时订阅:
observer机制让前端订阅某个模型实例,数据一变立即推送 - 🔐权限无缝迁移:DRF 的
AllowAny、IsAuthenticated权限可以直接沿用
一句话总结:想给 Django 项目加实时能力,又不想重学一套新框架,选 DCRF 就对了。
🚀 第一步:pip install 一键安装(约 30 秒)
在已安装 Django 的虚拟环境中执行一行命令即可:
pip install djangochannelsrestframeworkDCRF 会自动安装它的三个核心依赖(见 setup.py):
| 依赖包 | 作用 |
|---|---|
| Django ≥ 4.2 | Web 框架基础 |
| channels ≥ 4.1 | WebSocket 与 ASGI 支持 |
| djangorestframework ≥ 3.15 | 序列化器与权限体系 |
安装完成后,在项目的settings.py中把channels加入INSTALLED_APPS,并指定 ASGI 应用:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', ... 'channels', ] ASGI_APPLICATION = 'mysite.asgi.application'⚙️ 第二步:配置 Channels v4 路由(约 1 分钟)
如果你的项目还没有 ASGI 配置,创建asgi.py文件:
import os from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') application = ProtocolTypeRouter({ 'http': get_asgi_application(), 'websocket': URLRouter([ # 稍后在这里挂载我们的 Consumer ]), })配置就绪!接下来进入正题,写第一个实时接口。
🧩 第三步:创建你的第一个 WebSocket 实时接口 Consumer(约 2 分钟)
DCRF 的核心是Consumer,它相当于 DRF 中的 View。我们以"用户列表实时查询"为例。
先创建序列化器serializers.py:
from rest_framework import serializers from django.contrib.auth.models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'username', 'email']再创建 Consumerconsumers.py,继承GenericAsyncAPIConsumer并混入ListModelMixin:
from django.contrib.auth.models import User from djangochannelsrestframework.generics import GenericAsyncAPIConsumer from djangochannelsrestframework.mixins import ListModelMixin from .serializers import UserSerializer class UserConsumer(ListModelMixin, GenericAsyncAPIConsumer): queryset = User.objects.all() serializer_class = UserSerializer没错,就这么简单!ListModelMixin会自动注册一个名为list的动作(action),对应接口路径可参考 djangochannelsrestframework/mixins.py。官方还提供了RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、PatchModelMixin、DeleteModelMixin,拼装即可获得完整 CRUD 能力。
🔌 第四步:挂载 WebSocket 路由(约 30 秒)
在asgi.py中把 Consumer 挂到路由上:
'websocket': URLRouter([ path('ws/users/', consumers.UserConsumer.as_asgi()), ])⚠️重要提醒:路由中必须使用.as_asgi()类方法,千万不要在代码里写UserConsumer()实例,这是新手最容易踩的坑。
🖥️ 第五步:前端连接并接收实时数据(约 1 分钟)
后端搞定,前端用几行原生 JavaScript 即可测试:
const ws = new WebSocket('ws://localhost:8000/ws/users/') ws.onopen = () => { ws.send(JSON.stringify({ action: 'list', request_id: 42 })) } ws.onmessage = (e) => { console.log('收到实时数据:', JSON.parse(e.data)) }连接建立后发送{action: "list", request_id: 42},服务端就会把用户列表作为实时消息推回来。这里的request_id用于标识是哪一次请求的响应,多请求并发时不会混淆。
🎉 恭喜!至此你的第一个WebSocket 实时接口已经跑通,全程不超过 5 分钟。
🌟 进阶探索:DCRF 还能做什么?
上手之后,这些能力会让你的实时应用如虎添翼:
1️⃣ 模型实时订阅(Observer)
通过ObserverModelInstanceMixin,前端可以订阅某个对象的变更,数据一改立即推送,适合做实时通知、在线协作、监控面板。核心代码位于 djangochannelsrestframework/observer/ 目录,官方示例见 docs/examples/model_observer.rst。
2️⃣ 自定义动作(Action)
用@action()装饰器即可扩展任意业务动作,比如"加入房间""发送私信":
from djangochannelsrestframework.decorators import action @action() async def join_room(self, pk=None, **kwargs): # 处理业务逻辑 return {'pk': pk}, 2003️⃣ 权限控制
DCRF 直接复用了 DRF 的权限体系,从 djangochannelsrestframework/permissions.py 导入即可:
from djangochannelsrestframework import permissions class UserConsumer(ListModelMixin, GenericAsyncAPIConsumer): permission_classes = (permissions.IsAuthenticated,)4️⃣ 复用普通 Django View
借助view_as_consumer,你甚至能把现有的 Django 视图直接"搬"进 WebSocket 通道,实现渐进式改造,详见 docs/examples/view_as_consumer.rst。
🛠️ 常见问题与避坑指南
| 问题 | 解决方案 |
|---|---|
| 连接后收不到数据 | 确认前端发送了action字段,且 action 名称与 mixin 提供的动作一致 |
| 数据库查询报错 | 在 async 方法中使用database_sync_to_async包裹 ORM 操作 |
| 权限校验不生效 | 确保从djangochannelsrestframework.permissions导入,而非 DRF 原包 |
| 消费者执行多次 | 同一文件内多个@model_observer装饰同一模型时,方法名不能重复 |
更详细的完整项目实战(含房间聊天、消息订阅等场景)推荐阅读官方教程 docs/tutorial/part_1.rst,跟着做一遍,你对 DCRF 的理解会更上一层楼。
💡 小结
5 分钟,从pip install djangochannelsrestframework到跑通第一个 WebSocket 实时接口,就是这么简单。DCRF 让 Django 开发者用熟悉的 DRF 心智模型低成本获得实时能力,无论是实时聊天、通知推送还是数据大屏,都能快速落地。现在就动手安装试试吧,你的下一个实时应用也许只差这一行命令!
【免费下载链接】djangochannelsrestframeworkA Rest-framework for websockets using Django channels-v4项目地址: https://gitcode.com/gh_mirrors/dj/djangochannelsrestframework
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考