前提
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):