9个视图子类和视图集

【一】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个接口都有了
  查单条和查所有
posted @ 2024-04-22 17:30  -半城烟雨  阅读(55)  评论(0)    收藏  举报