天天看點

Django--五個擴充類

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()),
           

效果圖:

Django--五個擴充類

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不變

執行效果:

Django--五個擴充類

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()),
           

效果如圖:

Django--五個擴充類

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