1 9个视图子类
9个视图子类就是GenericAPIView
和5个视图拓展类的组合
通过from rest_framework.generics import
导入,写视图类就只用继承视图子类
ListAPIView
,只用于展示所有CreateAPIView
,添加一条ListCreateAPIView
,展示所有和添加一条RetrieveAPIView
,展示一条DestroyAPIView
,删除一条UpdateAPIView
,修改一条RetrieveUpdateDestroyAPIView
,展示、修改、删除一条RetrieveDestroyAPIView
,展示一条,删除一条RetrieveUpdateAPIView
,展示一条,修改一条
以后想写5个接口中的某一个或某几个或所有,只需要选择继承不同的类即可,类中只需要配置两个类属性
1.1 视图类
想写 publish: 查询所有,查询单条,修改一条,新增一条,删除一条的接口
class PublishView(ListCreateAPIView):
queryset = Publish.objects.all()
serializer_class = PublishSerializer
class PublishDetailView(RetrieveUpdateDestroyAPIView):
queryset = Publish.objects.all()
serializer_class = PublishSerializer
1.2 路由
路由没变
path('publish/', PublishView.as_view()),
path('publish/<int:pk>', PublishView.as_view()),
2 视图集
将使用同一个库和序列化类的视图整合起来
2.1 ModelViewSet
视图函数
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
queryset = Publish.objects.all()
serializer_class = PublishSerialize
路由
path('publish/', PublishView.as_view({
'get':'list','post':'create'})),
path('publish/<int:pk>', PublishView.as_view({
'get':'retrieve','put':'update','delete':'destroy'})),
2.1.1 ModelViewSet源码分析
-
有查询所有接口
get–list----》拿到所有数据,序列化–返回 -
新增一条
post—create—》之前咱们写的新增的代码一样的
2.2 ViewSetMixin
ModelViewSet中继承了五个视图拓展类和GenericViewSet