DRF框架之視圖集(ModelViewSet)簡介


DRF框架中,一共有三個視圖集類,我們這里只說明ModelViewSet一個。

ModelViewSet是封裝度最高的DRF的視圖類。包含了怎刪改查中的所有接口操作。

它繼承自GenericViewSet、ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

所以,在使用ModelViewSet定義API時,我們只需要套用模板即可。

使用視圖集,可以將一系列邏輯相關的動作放到一個類中:

  • list() 提供一組數據
  • retrieve() 提供單個數據
  • create() 創建數據
  • update() 更新數據
  • destory() 刪除數據

視圖集類不再實現get()、post()、put()、delete()方法,而是實現動作 action。 如 list()、retrieve()、create()、update()、destory()

模板代碼:

class BookInfoViewSet(ModelViewSet):
    """增刪改查圖書信息"""

    # 指定查詢集
    queryset = BookInfo.objects.all()
    # 指定序列化器
    serializer_class = BookInfoModelSerializer

當我們,定義好了API視圖后,我們需要在路由中,將請求方法與action進行綁定。

路由代碼:

urlpatterns = [
    url(r'^books/$', views.BookInfoViewSet.as_view({'get':'list'})),
    url(r'^books/(?P<pk>\d+)/$', views.BookInfoViewSet.as_view({'get':'retrieve'})),
]

通過,以上講解,我們發現使用ModelViewSet定義API時,非常的方便,只需要幾行代碼即可。

但是,DRF框架提供的action根本不能滿足,我們客戶的奇葩需求,那么,我們需要進行自定義action。

自定義action:

自定義action很簡單,其實,我們只需要在,使用ModelViewSet定義的api類中,自定義action函數后,再將自定義的函數在路由中綁定即可。

自定義action代碼:

    def 名稱(self, request):
        '''
        自定義action
        :return: JSON數據
        '''
        pass

路由代碼:

urlpatterns = [
    url(r'^books/$', views.BookInfoViewSet.as_view({'get':'action名稱'})),
]

案例代碼:

class BookInfoListAPIView(ModelViewSet):
    '''使用ModelViewSet定義API
    添加數據
    '''

    # 設置查詢集
    queryset = BookInfo.objects.all()
    # 設置序列化器類
    serializer_class = BookInfoModelSerializer
    
    def latest(self, request):
        '''獲取最后一條記錄'''
        
        # 獲取模型數據
        book = BookInfo.objects.latest('id')
        
        # 獲取序列化器對象
        s = BookInfoModelSerializer(instance=book)
        
        return Response(s.data)

案例路由代碼:

urlpatterns = [
    url(r'^books/$', views.BookInfoListAPIView.as_view({'get':'latest'})),
]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM