DRF:ModelSerializer+APIView+GenericAPIView+Mixin+Mixin2.0+最终合并版

#views.py

from django.shortcuts import render
from .serializers import SuperviseSerializers
from rest_framework.views import APIView
from .models import Supervise
from rest_framework.response import Response
from rest_framework import status
# Create your views here.

class SuperviseView(APIView):
    """督查视图"""
    def get(self,request):
        supervises = Supervise.objects.all()
        ser = SuperviseSerializers(instance=supervises,many=True)
        return Response(ser.data,status=status.HTTP_200_OK)
    
    def post(self,request):
        supervises = SuperviseSerializers(data=request.data)
        try:
            supervises.is_valid(raise_exception=True)
            supervises.save()
            return Response(supervises.data,status=status.HTTP_201_CREATED)
        except Exception as e:
            return Response(supervises.errors)

class SuperviseDetailView(APIView):
    def get(self,request,id):
        supervises = Supervise.objects.get(id=id)
        ser = SuperviseSerializers(instance=supervises)
        return Response(ser.data,status=status.HTTP_200_OK)
    def put(self,request,id):
        supervise = Supervise.objects.get(id=id)
        ser = SuperviseSerializers(instance=supervise,data=request.data)
        try:
            ser.is_valid(raise_exception=True)
            ser.save()
            return Response(ser.data,status=status.HTTP_200_OK)
        except Exception as e:
            return Response(ser.errors)
    def delete(self,request,id):
        supervise = Supervise.objects.get(id=id).delete()
        return Response(supervise,status=status.HTTP_200_OK)
# GenericAPIView版本
# views.py

from rest_framework.generics import GenericAPIView

class SuperviseView(GenericAPIView):
    queryset = Supervise.objects
    serializer_class = SuperviseSerializers

    def get(self,request):
        serializer = self.get_serializer(instance=self.get_queryset(),many=True)
        return Response(serializer.data)
    
    def post(self,request):
        serializer = self.get_serializer(data = request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors)
    
class SuperviseDetailView(GenericAPIView):
    queryset = Supervise.objects
    serializer_class = SuperviseSerializers
    
    def get(self,request,pk):
        serializer = self.get_serializer(instance=self.get_object())
        return Response(serializer.data)
    
    def put(self,request,pk):
        serializer = self.get_serializer(instance=self.get_object(),data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors)
        
    def delete(self,request,pk):
        self.get_object().delete()
        return Response()

# Mixin版本
# views.py
from rest_framework.mixins import CreateModelMixin,ListModelMixin,RetrieveModelMixin,DestroyModelMixin,UpdateModelMixin

class SuperviseView(GenericAPIView,ListModelMixin,CreateModelMixin):
    queryset = Supervise.objects
    serializer_class = SuperviseSerializers

    def get(self,request):
        return self.list(request)

    def post(self,request):
        return self.create(request)
    
class SuperviseDetailView(GenericAPIView,RetrieveModelMixin,DestroyModelMixin,UpdateModelMixin):
    queryset = Supervise.objects
    serializer_class = SuperviseSerializers

    def get(self,request,pk):
        return self.retrieve(request)
    
    def put(self,request,pk):
        return self.update(request)
    
    def delete(self,request,pk):
        return self.destroy(request)
from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView

class SuperviseView(ListCreateAPIView):
    queryset = Supervise.objects
    serializer_class = SuperviseSerializers

class SuperviseDetailView(RetrieveUpdateDestroyAPIView):
    queryset = Supervise.objects
    serializer_class = SuperviseSerializers
# views.py
# 最终版

from rest_framework.viewsets import ModelViewSet

class SuperviseView(ModelViewSet):
    queryset = Supervise.objects
    serializer_class = SuperviseSerializers


##########################################################
# urls.py
from rest_framework.routers import DefaultRouter

urlpatterns = [
]

router = DefaultRouter()
router.register('super',views.SuperviseView)

urlpatterns += router.urls