5 分钟快速上手 djangochannelsrestframework:从 pip install 到你的第一个 WebSocket 实时接口
2026/8/21 17:22:47 网站建设 项目流程

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 风格开发:复用你熟悉的querysetserializer_classpermission_classes写法
  • Async 原生支持:基于AsyncAPIConsumer构建,天然适配高并发实时场景
  • 🔄CRUD 一键生成:内置ListModelMixinCreateModelMixin等,秒建完整 REST 风格动作
  • 👀模型实时订阅observer机制让前端订阅某个模型实例,数据一变立即推送
  • 🔐权限无缝迁移:DRF 的AllowAnyIsAuthenticated权限可以直接沿用

一句话总结:想给 Django 项目加实时能力,又不想重学一套新框架,选 DCRF 就对了。


🚀 第一步:pip install 一键安装(约 30 秒)

在已安装 Django 的虚拟环境中执行一行命令即可:

pip install djangochannelsrestframework

DCRF 会自动安装它的三个核心依赖(见 setup.py):

依赖包作用
Django ≥ 4.2Web 框架基础
channels ≥ 4.1WebSocket 与 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。官方还提供了RetrieveModelMixinCreateModelMixinUpdateModelMixinPatchModelMixinDeleteModelMixin,拼装即可获得完整 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}, 200

3️⃣ 权限控制

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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询