【DRF】View APIView Viewset(更新中~)

簡介

Viewset 是 DRF 中引入的一個 class,它對 DRF 自身提供的 APIView 進行了再次封裝,而 APIView 是對原生 Django View 的二次封裝,靈活運用 Viewset 能夠大幅度提高業務開發效率,且大大提高了代碼的可維護性。django


三者區別

【View】

來自 Django 原生中,是全部基於類的view的父類,它負責將視圖鏈接到URL、HTTP 方法調度(GET,POST等)和其它簡單的功能。json

【APIView】

APIView 是 DRF 中全部view的父類,自己繼承於Django的view,只有簡單的調度方法和檢查。bash

APIView 和 View 的不一樣

  • 請求和返回使用的 DRF 的Request Response而不是django的HttpRequest HttpResponse
  • 請求傳入時進行身份驗證,並在傳給處理方法前進行權限檢驗
  • 任何APIException都會被捕捉並放入合適的想要中
  • response返回的內容需是序列化的json

引入Viewset

from rest_framework import viewsets
複製代碼

Viewsets包含的Class(經常使用的)

0.ViewSetMixin

簡介:Viewset的基類,它重寫了原來 django view 中 .as_view() 方法,使得註冊Url變得更加簡單,原生 Django View 經過重寫 get 和 post 方法的具體視圖來達到實現邏輯
在 Viewset 中則可經過:ide

view = MyViewSet.as_view({'get': 'list', 'post': 'create'})
複製代碼

指定請求調用的函數函數

1.GenericViewSet

繼承:ViewSetMixin generics.GenericAPIViewpost

class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
    """ The GenericViewSet class does not provide any actions by default, but does include the base set of generic view behavior, such as the `get_object` and `get_queryset` methods. """
    pass
複製代碼

(因而可知 Viewset 是對原來 APIView 的二次封裝)spa

2.ModelViewSet

繼承:mixins.CreateModelMixin mixins.RetrieveModelMixin mixins.UpdateModelMixin mixins.DestroyModelMixin mixins.ListModelMixin GenericViewSetrest

相關文章
相關標籤/搜索