zoukankan      html  css  js  c++  java
  • Django-10-Mixin、xxxAPIView、GenericViewSet

    1、ModelMixin 

    Mixin方法能够简化get、post、put、delete等请求

    from rest_framework import mixins

    mixins.ListModelMixin:get整个项目数据列表

    mixins.CreateModelMixin:创建

    mixins.RetrieveModelMixin:get项目中某一详情数据

    mixins.UpdateModelMixin:更新、修改

    mixins.DestroyModelMixin:删除

    from .models import Interfaces
    from rest_framework.generics import GenericAPIView
    from rest_framework.request import Request
    from rest_framework.filters import SearchFilter, OrderingFilter
    from rest_framework import mixins
    from . import serializers
    from utils.pagination import PageNumberPagination
    
    
    class InterfacesView(mixins.ListModelMixin,
                         mixins.CreateModelMixin,
                         GenericAPIView):
        queryset = Interfaces.objects.all()
        serializer_class = serializers.InterfacesModelSerializer
        filter_backends = [SearchFilter, OrderingFilter]
        search_fields = ['^name', '=tester']
        ordering_fields = ['id', 'name', 'tester']
        pagination_class = PageNumberPagination
    
        def get(self, request: Request):
            return self.list(request)
    
        def post(self, request: Request):
            return self.create(request)
    
    
    class InterfacesDetailView(mixins.RetrieveModelMixin,
                               mixins.UpdateModelMixin,
                               mixins.DestroyModelMixin,
                               GenericAPIView):
        queryset = Interfaces.objects.all()
        serializer_class = serializers.InterfacesModelSerializer
    
        def get(self, request, pk):
            return self.retrieve(request)
    
        def put(self, request: Request, pk):
            return self.update(request)
    
        def delete(self, request: Request, pk):
            return self.destroy(request)

     

    2、xxxAPIView

    xxxAPIView = ModelMixin + GenericAPIView

    
    

    •  class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,GenericAPIView)

     

     

    from rest_framework import viewsets

    3、ViewSet

     ViewSet =  ViewSetMixin + APIView

     ViewSet支持请求方法与action方法进行一一映射,action方法可以支持改名

    urls.py
    
    urlpatterns = [
        # a.只要继承了ViewSet的类视图,那么就支持请求方法名称与action名称进行一一对应的功能,是ViewSetMixin提供对的
        # b.在as_view方法中添加字典,key为请求方法名称(get、post、put、delete、patch、option、head)
        # value为需要调用的action方法名称
        path('projects/', views.ProjectViewSet.as_view({
            'get': 'list',
            'post': 'create'
        })),
        path('projects/<int:pk>/', views.ProjectViewSet.as_view({
            'get': 'retrieve',
            'put': 'update',
            'patch': 'partial_update',
            'delete': 'destroy'
        })),

     

    4、GenericViewSet

    a.ViewSet继承了ViewSetMixin、views.APIView,所以未提供对于分页、过滤功能的支持
    b.GenericViewSet继承了ViewSetMixin、generics.GenericAPIView,所以支持分页、过滤功能

    GenericViewSet = ViewSetMixin + GenericAPIView

    在定义路由时,需要在路由中绑定action方法

    5、GenericViewSet + ModelMixin = ModelViewSet

    GenericViewSet + ModelMixin 提供action方法映射、分页过滤、合并get等代码的所有功能

     如果不想继承ModelMixin 中那么多的方法,可以选择性的用ReadOnlyModelViewSet、ModelViewSet

  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/erchun/p/14482720.html
Copyright © 2011-2022 走看看