django rest frame work 初步使用 >> APIView + Maxin + 通用混合

Part 1. API View:

from helloworld.models import Publisher
from helloworld.serializers import PublisherSerializer

from rest_framework.response import Response
from rest_framework import status

from rest_framework.views import APIView
from django.http import Http404

class PublisherList(APIView):
    """
    list all
    or POST: create
    """
    def get(self, request):
        queryset = Publisher.objects.all()

        s = PublisherSerializer(queryset, many=True)
        return Response(s.data)

    def post(self, request):
        s = PublisherSerializer(data=request.data)
        if s.is_valid():
            s.save()
            return Response(s.data, status=status.HTTP_201_CREATED)
        return Response(s.errors, status=status.HTTP_400_BAD_REQUEST)


class PublisherDetail(APIView):
    """
    GET:
    PUT: update
    DELETE:
    """
    def get_object(self, pk):
        try:
            return Publisher.objects.get(id=pk)
        except Publisher.DoesNotExist:
            return Http404

    def get(self, request, pk):
        p = self.get_object(pk)

        s = PublisherSerializer(p)
        return Response(s.data)

    def put(self, request, pk):
        p = self.get_object(pk)

        s = PublisherSerializer(p, data=request.data)
        if s.is_valid():
            s.save()
            return Response(s.data)
        return Response(s.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk):
        p = self.get_object(pk)
        p.delete()

        return Response(status=status.HTTP_204_NO_CONTENT)
views.py
urlpatterns = [

    path('p/', views.PublisherList.as_view()),
    path('p/<int:pk>/', views.PublisherDetail.as_view())

]
urls.py

 

Part 2. 混合视图

from rest_framework import mixins
from rest_framework import generics

from helloworld.models import Publisher
from helloworld.serializers import PublisherSerializer


class PublisherList(mixins.ListModelMixin,
                    mixins.CreateModelMixin,
                    generics.GenericAPIView):
    queryset = Publisher.objects.all()
    serializer_class = PublisherSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)


class PublisherDetail(mixins.RetrieveModelMixin,
                      mixins.UpdateModelMixin,
                      mixins.DestroyModelMixin,
                      generics.GenericAPIView):
    queryset = Publisher.objects.all()
    serializer_class = PublisherSerializer

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)
views.py

 

Part 3. 通用超级混合视图

from helloworld.models import Publisher
from helloworld.serializers import PublisherSerializer

from rest_framework import mixins
from rest_framework import generics

class PublisherList(generics.ListCreateAPIView):
    queryset = Publisher.objects.all()
    serializer_class = PublisherSerializer

class PublisherDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Publisher.objects.all()
    serializer_class = PublisherSerializer
views.py

 

posted @ 2018-08-21 20:45  小小Guido妹  阅读(208)  评论(0编辑  收藏  举报