1)ListModelMixin
清單視圖擴充類,提供
list(request, *args, **kwargs)
方法快速實作清單視圖,傳回200狀态碼。
該Mixin的list方法會對資料進行過濾和分頁。
from rest_framework import mixins
class BookListView(mixins.ListModelMixin,GenericAPIView):
"""GenericAPIView實作擷取所有圖書資訊的接口"""
# 指定反序列化器類
serializer_class = BookInfoSerializer
# 指定查詢集 queryset負責接受查詢集
queryset = BookInfo.objects.all()
def get(self,request):
return self.list(request)
url位址設定:
url(r'^books/$',new_views.BookListView.as_view()),
效果圖:

2)CreateModelMixin
建立視圖擴充類,提供
create(request, *args, **kwargs)
方法快速實作建立資源的視圖,成功傳回201狀态碼。
如果序列化器對前端發送的資料驗證失敗,傳回400錯誤。
# 子類視圖ListAPIView
class BookListView(ListAPIView):
"""
ListAPIView實作擷取所有圖書資訊的接口
ListAPIView 自己寫了 def get()..... ret...
是以我們不用在寫
"""
# 指定反序列化器類
serializer_class = BookInfoSerializer
# 指定查詢集 queryset負責接受查詢集
queryset = BookInfo.objects.all()
url不變
執行效果:
3) RetrieveModelMixin
詳情視圖擴充類,提供
retrieve(request, *args, **kwargs)
方法,可以快速實作傳回一個存在的資料對象。
如果存在,傳回200, 否則傳回404。
class BookDetailView(mixins.RetrieveModelMixin,GenericAPIView):
"""GenericAPIView查詢單一的資料的接口"""
# 指定反序列化器類
serializer_class = BookInfoSerializer
# 指定查詢集 queryset負責接受查詢集
queryset = BookInfo.objects.all()
def get(self,request,pk):
return self.retrieve(request)
url設定如下:
url(r'^books/(?P<pk>\d+)/$', new_views.BookDetailView.as_view()),
效果如圖:
4)UpdateModelMixin
更新視圖擴充類,提供
update(request, *args, **kwargs)
方法,可以快速實作更新一個存在的資料對象。
同時也提供
partial_update(request, *args, **kwargs)
方法,可以實作局部更新。
成功傳回200,序列化器校驗資料失敗時,傳回400錯誤。
class BookUpdateView(mixins.UpdateModelMixin,GenericAPIView):
"""UpdateModelMixin擷取資料"""
# 指定反序列化器類
serializer_class = BookInfoSerializer
# 指定查詢集 queryset負責接收查詢集
queryset = BookInfo.objects.all()
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
5)DestroyModelMixin
删除視圖擴充類,提供
destroy(request, *args, **kwargs)
方法,可以快速實作删除一個存在的資料對象。
成功傳回204,不存在傳回404。
class BookDestroyView(mixins.DestroyModelMixin,GenericAPIView):
"""UpdateModelMixin擷取資料"""
# 指定反序列化器類
serializer_class = BookInfoSerializer
# 指定查詢集 queryset負責接收查詢集
queryset = BookInfo.objects.all()
def delete(self,request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
幾個可用子類視圖
1) CreateAPIView
提供 post 方法
繼承自: GenericAPIView、CreateModelMixin
2)ListAPIView
提供 get 方法
繼承自:GenericAPIView、ListModelMixin
3)RetrieveAPIView
提供 get 方法
繼承自: GenericAPIView、RetrieveModelMixin
4)DestoryAPIView
提供 delete 方法
繼承自:GenericAPIView、DestoryModelMixin
5)UpdateAPIView
提供 put 和 patch 方法
繼承自:GenericAPIView、UpdateModelMixin
6)RetrieveUpdateAPIView
提供 get、put、patch方法
繼承自: GenericAPIView、RetrieveModelMixin、UpdateModelMixin
7)RetrieveUpdateDestoryAPIView
提供 get、put、patch、delete方法
繼承自:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin