ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

5 分钟快速上手 djangochannelsrestframework:从 pip install 到你的第一个 WebSocket 实时接口

5 分钟快速上手 djangochannelsrestframework:从 pip install 到你的第一个 WebSocket 实时接口 5 分钟快速上手 djangochannelsrestframework从 pip install 到你的第一个 WebSocket 实时接口【免费下载链接】djangochannelsrestframeworkA Rest-framework for websockets using Django channels-v4项目地址: https://gitcode.com/gh_mirrors/dj/djangochannelsrestframework如果你正在寻找一个能像Django REST FrameworkDRF一样优雅地开发WebSocket 实时接口的方案那么djangochannelsrestframework正是你需要的工具。这是一个基于Django Channels v4的 REST 风格 WebSocket 框架让你用熟悉的 DRF 套路序列化器、权限、mixin快速构建实时 API前后端数据推送从此不再手忙脚乱。本文带你用 5 分钟完成从安装到跑通第一个实时接口的全过程。 先认识 djangochannelsrestframeworkdjangochannelsrestframework简称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.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.pyfrom 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并混入ListModelMixinfrom 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, pkNone, **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),仅供参考
返回列表