使用DRF快速搭建API接口,Django REST Framework ModelViewSet 用法总结
:本站 2026-03-01 09:10:09 :4

Django REST Framework ModelViewSet 用法总结
1. ModelViewSet 简介
ModelViewSet是 Django REST Framework (DRF) 中的一个视图集类,它继承自多个 mixin 类(如 CreateModelMixin、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin、ListModelMixin),提供了完整的 CRUD(创建、读取、更新、删除)操作。使用时,你只需指定 queryset和 serializer_class,即可快速构建 RESTful API。2. 原生的路由
当使用 DRF 的路由器(如
SimpleRouter或 DefaultRouter)注册 ModelViewSet时,会自动生成以下标准路由:HTTP 方法 | URL 路径 | 视图集方法 | 操作描述 |
|---|---|---|---|
GET | /articles/ | list | 获取文章列表 |
POST | /articles/ | create | 创建新文章 |
GET | /articles/{id}/ | retrieve | 获取单篇文章详情 |
PUT | /articles/{id}/ | update | 全量更新文章 |
PATCH | /articles/{id}/ | partial_update | 部分更新文章 |
DELETE | /articles/{id}/ | destroy | 删除文章 |
这些路由基于视图集的默认方法自动映射,无需手动定义。
3. 新建自定义路由
你可以通过
@action装饰器在视图集中添加自定义动作,从而生成额外的路由。@action装饰器允许你定义非标准 CRUD 的端点,例如发布文章、统计数据等。@action参数:detail: 布尔值。如果为True,路由将包含对象的 ID(如/articles/{id}/publish/);如果为False,路由为列表级别(如/articles/publish/)。methods: 列表,指定允许的 HTTP 方法,如['post', 'get']。url_path: 自定义 URL 路径后缀,默认为方法名。url_name: 路由名称后缀。
自定义路由会自动注册到路由器中,与原生路由一起工作。
4. 以 Article 模型为例的完整示例
4.1 模拟 Article 模型
在 Django 的
models.py中定义一个简单的文章模型:4.2 创建序列化器
在 DRF 的
serializers.py中定义序列化器:4.3 定义 ModelViewSet
在
views.py中创建 ArticleViewSet,继承自 ModelViewSet,并添加自定义动作:4.4 配置路由
在
urls.py中,使用 DRF 的路由器注册 ArticleViewSet:4.5 生成的路由总览
注册后,路由器将生成以下路由:
- 原生路由(自动):
GET /articles/-> 文章列表POST /articles/-> 创建文章GET /articles/{id}/-> 文章详情PUT /articles/{id}/-> 全量更新文章PATCH /articles/{id}/-> 部分更新文章DELETE /articles/{id}/-> 删除文章
- 自定义路由(通过
@action添加):POST /articles/{id}/publish/-> 发布单篇文章GET /articles/published/-> 获取已发布文章列表
4.6 使用示例
- 获取所有文章:
GET http://yourdomain/articles/ - 创建文章:
POST http://yourdomain/articles/附带 JSON 数据,如{"title": "示例", "content": "内容", "author": "作者"} - 发布文章:
POST http://yourdomain/articles/1/publish/(假设文章 ID 为 1) - 获取已发布文章:
GET http://yourdomain/articles/published/
总结
- ModelViewSet 提供了开箱即用的 CRUD 操作,适合快速开发标准 API。
- 原生路由 通过路由器自动映射到标准 HTTP 方法。
- 自定义路由 使用
@action装饰器轻松添加,支持列表级或详情级端点。 - 在实际项目中,你可以根据业务需求扩展自定义动作,例如添加权限、过滤、分页等(在视图集中设置
permission_classes、filter_backends等)。
这个示例展示了从模型定义到 API 路由的完整流程,你可以直接复制代码并调整以适应实际项目。
本文编辑:admin
更多文章:
使用DRF快速搭建API接口,Django REST Framework ModelViewSet 用法总结
2026年3月1日 09:10
django.utils中都有哪些功能?django.utils工具都详情的举例说明
2025年11月27日 22:32
Django 的基于类的视图总结,Django CBV类的详细使用方法整理
2025年11月17日 08:52
Django transaction.atomic() 的具体作用和用法?
2025年10月31日 23:35
django 批量操作的方法有哪些?如何高效的批量更新django内容
2025年10月31日 23:30
Django get_FOO_display() 方法,Django模型中原生方法总结
2025年10月13日 20:56
django字段查找(Field Lookups)总结,django查询中指定特定的条件或对字段的处理方法
2025年10月8日 23:07


















