【一】9个视图子类
【1】五个基本的
from rest_framework.generics import CreateAPIView,
ListAPIView, RetrieveAPIView, DestroyAPIView, UpdateAPIView
【2】四个融合的
ListCreateAPIView 查询所有增加单个
RetrieveUpdateDestroyAPIView 查询单个更新删除单个
RetrieveDestroyAPIView 查询单个删除单个
RetrieveUpdateAPIView 查询单个更新单个
from rest_framework.generics import ListCreateAPIView
from rest_framework.generics import RetrieveUpdateDestroyAPIView
from rest_framework.generics import RetrieveDestroyAPIView
from rest_framework.generics import RetrieveUpdateAPIView
【3】案例
【1】查询所有和新增一条接口
class BookView(ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookModelSerializer
【2】查询更新删除一条接口
class BooKDetailView(RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookModelSerializer
【二】视图集
【1】使用
from rest_framework.viewsets import ModelViewSet
class BookSetView(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookModelSerializer
urlpatterns = [
path('bookset/', BookSetView.as_view({'get': 'list', 'post': 'create'})),
path('bookset/<int:pk>/', BookSetView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
]
【2】ModelViewSet
- 继承了5个视图扩展类和GenericViewSet
- GenericViewSet:ViewSetMixin+GenericAPIView
- ViewSetMixin 核心---》只要继承它--》路由写法就变了--》必须加action-
CreateModelMixin
RetrieveModelMixin
DestroyModelMixin
ListModelMixin
UpdateModelMixin
案例:定制查询一条的返回格式
class BookView(ModelViewSet):
# 查询所有和新增一条接口
queryset = Book.objects.all()
serializer_class = BookSerializer
def retrieve(self, request, *args, **kwargs):
res=super().retrieve(request, *args, **kwargs)
# 从res中取出响应体内容---》res.data
return Response({'code':100,'msg':'查询单条成功','result':res.data})
【3】viewsets下常用的类
class ViewSet(ViewSetMixin, views.APIView):
"""
The base ViewSet class does not provide any actions by default.
"""
pass
1 ModelViewSet --》视图类继承它---》5个接口都有了
2.ViewSetMixin 继承它
3.APIView+ViewSetMixin=ViewSet--》路由写法变了--》映射
4.GenericAPIView+ViewSetMixin=GenericViewSet--》路由写法变了--》映射
5.ReadOnlyModelViewSet--》视图类继承它---》2个接口都有了
查单条和查所有