Rest-framework專欄講解(八):ViewSet

MedusaSorcerer的博客


點擊跳轉到 Rest-Framework 專欄目錄

Django 項目的 ORM(Object Relational Mapping, 對象關係映射) 能夠給咱們省略構造 SQL 查詢語句的麻煩, 可是對於試圖, 咱們已經構建了 Model 的狀況下依舊須要創造一些邏輯代碼, 那已知這些封裝, 咱們能夠再對代碼簡化。python

ViewSet 操做

在標準的接口中, 提供了標準的建立/檢索/更新/刪除實例對象的路由, 如:app

class UserViewSet(viewsets.ViewSet):
    """ Example empty viewset demonstrating the standard actions that will be handled by a router class. If you're using format suffixes, make sure to also include the `format=None` keyword argument for each action. """

    def list(self, request):
        pass

    def create(self, request):
        pass

    def retrieve(self, request, pk=None):
        pass

    def update(self, request, pk=None):
        pass

    def partial_update(self, request, pk=None):
        # 不經常使用
        pass

    def destroy(self, request, pk=None):
        pass
複製代碼

在分發期間你能夠使用如下屬性:post

  • basename:用於建立 URL 的基礎名稱
  • action:當前操做的動做名稱字符串(如 list)
  • detail:是否返回列表/詳情信息的布爾值
  • suffix:視圖集類型的顯示後綴
  • name:視圖集的顯示名稱, 會與 suffix 參數互斥
  • description:單個試圖的顯示描述

API參考

ViewSet 集成自 APIView, 你能夠使用任何標準屬性獲取數值幫助 API 構建, 如 permission_classes, authentication_classes 來幫助試圖控制訪問策略。spa

GenericViewSet 是繼承自 GenericAPIView, 並提供了 get_objectget_queryset 的方法以及其餘視圖行爲的方法。code

ModelViewSet 是繼承自 GenericAPIView, 並支持 .list(), .retrieve(), .create(), .update(), .partial_update().destroy() 方法的視圖類, 一般你須要指定 querysetserializer_class 兩個屬性。orm

ReadOnlyModelViewSet 時繼承自GenericAPIView, 並支持 .list(), .retrieve() 的只讀視圖類, 一般你須要指定 querysetserializer_class 兩個屬性。router

相關文章
相關標籤/搜索