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的使用方式 |