[django] rest_framework視圖和路由

liwenzhou
yuan

前提

1、序列化

from rest_framework import serializers
from app01 import models

class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Comment
        fields = "__all__"
        extra_kwargs = {
            "content": {"error_messages": {"required": "評論內容不能爲空"}},
            "article": {"error_messages": {"required": "文章不能爲空"}}
        }

class SchoolSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.School
        fields = "__all__"

APIView

from rest_framework.views import APIView

class SchoolView(APIView):
    def get(self, request, *args, **kwargs):
        query_set = models.School.objects.all()
        ser_obj = app01_serializers.SchoolSerializer(query_set, many=True)
        return Response(ser_obj.data)


class SchoolDetail(APIView):
    def get(self, request, pk, *args, **kwargs):
        obj = models.School.objects.filter(pk=pk).first()
        ser_obj = app01_serializers.SchoolSerializer(obj)
        return Response(ser_obj.data)

視圖三部曲

1、mixins

mixins.ListModelMixin:返回一個queryset列表 -> get
mixins.CreateModelMixin:創建一個實例 -> Post

mixins.RetrieveModelMixin:返回一個具體的實例 -> get
mixins.UpdateModelMixin:更新某個實例 -> put/patch
mixins.DestroyModelMixin:刪除某個實例 -> delete

generics.GenericAPIView

2、混合通用視圖

generics.ListCreateAPIView
generics.RetrieveUpdateDestroyAPIView

3、viewsets.ModelViewSet


url(r'^books/$', views.BookViewSet.as_view({"get":"list","post":"create"}),name="book_list"),
url(r'^books/(?P<pk>\d+)$', views.BookViewSet.as_view({
            'get': 'retrieve',
            'put': 'update',
            'patch': 'partial_update',
            'delete': 'destroy'
        }),name="book_detail"),


class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializers

class View(object):

class APIView(View):

class GenericAPIView(views.APIView):

class GenericViewSet(ViewSetMixin, generics.GenericAPIView)

class ModelViewSet(mixins.CreateModelMixin,
               mixins.RetrieveModelMixin,
               mixins.UpdateModelMixin,
               mixins.DestroyModelMixin,
               mixins.ListModelMixin,
               GenericViewSet):
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章