drf-day4
1. 群体修改
局部修改
DRF默认没有提供修改多个对象的方法,需要自己通过
ListSerializer来重写update方法来实现修改多个对象的逻辑
- ListSerializer使用方式
1 | class BookListSerializer(serializers.ListSerializer): |
1 | # 总结 |
2. DRF视图Generics与mixins
DRF中有四大视图组件:
views、generics、mixins、viewset
views: DRF原生的视图模块,提供最基本的视图访问方式
mixins: 五大工具类,分别提供不同的操作方式
generics: 方法视图,提供内置操作对象以及序列化器的方法
viewset: 视图集
generics.GenericAPIView
generics.GenericAPIView:主要作用是提供了三个方法,分别是:
get_queryset:可以通过在类视图指定的queryset属性来获取指定模型的所有数据
get_serializer: 通过当前类视图指定的serializer_class属性来获取当前视图要使用的序列化器
get_object: 获取要操作的单个对象,通过url指定的参数来查询要操作的单个对象
lookup_field:来指定url参数的名称
mixins五大工具视图
mixins提供了多种查询API,需要与
generics.GenericAPIView共同继承使用
CreateModelMixin: 创建单个对象
ListModelMixin: 查询所有
RetrieveModelMixin:查询单个
UpdateModelMixin:更新单个
DestroyModelMixin:删除单个
1 | # GenericAPIView继承APIView 两者是完全兼容的 |
generics工具视图
1、generics工具视图同时继承
GenericAPIView与mixins模块下的各个工具类,所以继承了不同类的视图就拥有对应的操作方法2、工具类视图为你混合好了各种常见的API操作,只需要继承各种工具类视图,提供
queryset与serializer_class即可完成对应的操作3、如果都是查询操作,则无法同时实现查询单个与查询多个

3. DRF视图 viewsets
主要目的:当执行的不是标准的http行为,让开发者可以将http请求映射到自定义的方法函数中
视图集的核心:
ViewSetMixin,继承此类就拥有了自定义视图以及路由映射的能力
ViewSet继承的是APIView与ViewSetMixin,没有提供任何默认的方法,所有的逻辑都需要自己实现GenericViewSet继承了GenericAPIView与ViewSetMixin,提供了与mixins混合使用的三个方法,只需要继承对应的mixins工具类即可使用对应的方法ModelViewSet: 继承了GenericViewSet与所有的mixins工具类
路由定义
1 | path("set/", views.BookViewSetView.as_view({"post": "user_login", "get": "get_user_count"})), |
视图开发
1 | class BookViewSetView(viewsets.GenericViewSet, mixins.ListModelMixin): |
4. DRF视图的继承关系

作业
1 | 1. 掌握ListSerializer的使用方式 |