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

  • 相关阅读:
    弹性盒模型:flex多行多列两端对齐,列不满左对齐
    小程序之程序构造器App()
    微信小程序之执行环境
    微信小程序之 ECMAScript
    小程序~WeUI下载使用
    补充拓展:CSS权重值叠加
    微信小程序~模板template引用
    小程序~列表渲染~key
    一个完整URL的组成
    CSS的BEM规范学习
  • 原文地址:https://www.cnblogs.com/erchun/p/14482720.html
Copyright © 2011-2022 走看看