外观
视图集
DRF 视图集
介绍
视图集是 DRF 提供的一种高级视图抽象,它将 CRUD 操作组织到一个类中,通过路由自动生成 URL,减少代码冗余。视图集本质是视图类的集合,结合了Mixin
类的功能,让 API 开发更高效。
- 代码复用性高,减少样板代码
- 自动生成路由,简化 URL 配置
- 支持动作(action)扩展,自定义 API 端点
DRF视图集的类型
DRF 提供了3种视图集基类,从低到高封装程度递增:
ViewSet:基础视图集,继承自
APIView
,需手动实现 CRUD 方法。pythonfrom rest_framework import viewsets from rest_framework.response import Response class UserViewSet(viewsets.ViewSet): def list(self, request): return Response({"message": "List all users"})
GenericViewSet:继承自
GenericAPIView
,支持queryset
和serializer_class
属性,但需手动添加Mixin
类。pythonfrom rest_framework import mixins, viewsets class UserViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): queryset = User.objects.all() serializer_class = UserSerializer
ModelViewSet:最常用的视图集,继承所有
Mixin
类,提供完整的 CRUD 操作。pythonfrom rest_framework import viewsets class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer
ModelViewSet生成的 URL 模式示例
HTTP 方法 | URL 路径 | 对应视图方法 | 功能 |
---|---|---|---|
GET | /users/ | list | 获取用户列表 |
POST | /users/ | create | 创建用户 |
GET | /users/{id}/ | retrieve | 获取单个用户 |
PUT | /users/{id}/ | update | 完整更新用户 |
PATCH | /users/{id}/ | partial_update | 部分更新用户 |
DELETE | /users/{id}/ | destroy | 删除用户 |
自定义视图集
自定义Mixin类
文件mysite\mars_framework\viewsets\mixins.py
,定义了下面Mixin
类
Mixin 类名称 | 主要方法 | 功能 |
---|---|---|
CustomCreateModelMixin | create() | 新增 |
CustomDestroyModelMixin | destroy() | 删除 |
CustomUpdateModelMixin | update() | 修改 |
CustomRetrieveModelMixin | retrieve() | 查询详情 |
CustomListModelMixin | list() | 查询列表 |
ListSimpleModelMixin | list_simple() | 查询列表简要信息 |
ExportModelMixin | export() | 导出数据 |
自定义视图集
文件mysite\mars_framework\viewsets\base.py
,CustomGenericViewSet
类继承了GenericViewSet
- 重写了
get_serializer_class()
方法:可以为每个action指定序列化器 - 重写了
get_permissions()
方法:可以为每个action指定权限 - 重写了
get_queryset()
方法:可以为每个action指定查询集,并且实现数据权限过滤
文件mysite\mars_framework\viewsets\base.py
,还通过继承Mixin类,定义了几个视图集。
- 在实际开发中,可以自由组合不同的Mixin类,实现不同的功能组合
- 在实际开发中,也可以添加新的Mixin类,实现新的功能