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