1. 程式人生 > >DRF--【檢視集】詳解

DRF--【檢視集】詳解

㈠ . ViewSet 檢視集

ViewSetMixin裡重寫了as_view方法,可以更方便的繫結actions。


ViewSet檢視集類不再實現get()、post()等方法,而是實現動作 action 如 list() 、create() 等。
檢視集只在使用as_view()方法的時候,才會將action動作與具體請求方式對應上

常用檢視集的父類

1) ViewSet

繼承自APIView,作用也與APIView基本類似,提供了身份認證、許可權校驗、流量管理等。
在ViewSet中,沒有提供任何動作action方法,需要我們自己實現action方法。
在這裡插入圖片描述

2)GenericViewSet


繼承自GenericAPIView,作用也與GenericAPIVIew類似,提供了get_object、get_queryset等方法便於列表檢視與詳情資訊檢視的開發,當然,他也沒有提供任何的action方法。
在這裡插入圖片描述

3)ModelViewSet
繼承自GenericAPIVIew,同時包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。
在這裡插入圖片描述

4)ReadOnlyModelViewSet
繼承自GenericAPIVIew,同時包括了ListModelMixin、RetrieveModelMixin;
在這裡插入圖片描述

action屬性
比如:

urlpatterns = [
url(r’^books/ $ ‘, views.BookInfoViewSet.as_view({‘get’: ‘list’})),
url(r’^books/latest/$ ‘, views.BookInfoViewSet.as_view({‘get’: ‘latest’})),
url(r’^books/(?P\d+)/$ ‘, views.BookInfoViewSet.as_view({‘get’: ‘retrieve’})),
url(r’^books/(?P\d+)/read/$’ , views.BookInfoViewSet.as_view({‘put’: ‘read’})),
]

在檢視集中,我們可以通過action物件屬性來獲取當前請求檢視集時的action動作是哪個

現在以ModelViewSet 做程式碼案例演示:

class BookInfoAPIView(ModelViewSet):
    # 定義檢視的查詢集
    queryset = BookInfo.objects.all()
    # 指定檢視對應的序列化器
    serializer_class = BookInfoModelSerializer
# url.py中的urlatterns配置
url(r'books/(?P<pk>\d+)/$', views.BookInfoAPIView.as_view({'get': 'retrieve'})),
url(r'books/', views.BookInfoAPIView.as_view({'get': 'list'}))

在繼承了ModelViewSet之後,我們只要在路由中配置的時候,說明什麼請求對應什麼action,就可以很簡單的完成檢視函式的關於資料庫的簡單的增刪改查。

㈡ . 路由router

上面的方式定義路由,相對來說,還是比較繁瑣的,我們現在可以使用更簡單的。

REST framework提供了兩個router:

  • SimpleRouter
  • DefaultRouter

DefaultRouter與SimpleRouter的區別是,DefaultRouter會多附帶一個預設的API根檢視,返回一個包含所有列表檢視的超連結響應資料。

使用方法:

(1):建立router物件,並註冊檢視集

from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'books', BookInfoAPIView, base_name='book')

register(prefix, viewset, base_name)

  • prefix 該檢視集的路由字首
  • viewset 檢視集
  • base_name 路由名稱的字首

(2):新增路由資料到urlpatterns中
有下面兩種方式都可以

urlpatterns = [
    ...
]
urlpatterns += router.urls
urlpatterns = [
    ...
    url(r'^', include(router.urls))
]

路由router形成URL的方式
在這裡插入圖片描述

在這裡插入圖片描述

㈢ . 檢視集中定義附加action動作

雖然ModelViewSet給我們提供了很簡單的定義檢視函式的方法,但是,並不能滿足咱們的所有需求,所以我們得需要自己定義action動作。

新增自定義動作需要使用rest_framework.decorators.action裝飾器。

以action裝飾器裝飾的方法名會作為action動作名,與list、retrieve等同。

action裝飾器可以接收兩個引數

  1. methods: 該action支援的請求方式,列表傳遞
  2. detail: 表示是action中要處理的是否是檢視資源的物件(即是否通過url路徑獲取主鍵)

detail引數:

  • True 表示使用通過URL獲取的主鍵對應的資料物件
  • False 表示不使用URL獲取主鍵
class BookInfoAPIView(ModelViewSet):
    # 定義檢視的查詢集
    queryset = BookInfo.objects.all()
    # 指定檢視對應的序列化器
    serializer_class = BookInfoModelSerializer

    # 自定義action動作
    @action(methods=['get'], detail=False)
    def latest(self, request):
        # 本action是獲取最新的書
        book = BookInfo.objects.latest('id')
        ser = self.get_serializer(book)
        return Response(ser.data)

㈣. 檢視函式繼承關係

這個是從pycharm直接匯出的,可以根據圖示將檢視之間的繼承關係梳理清楚。
在這裡插入圖片描述

相關推薦

DRF--檢視

㈠ . ViewSet 檢視集 ViewSetMixin裡重寫了as_view方法,可以更方便的繫結actions。 ViewSet檢視集類不再實現get()、post()等方法,而是實現動作 action 如 list() 、create() 等。 檢視集

計算機網絡網絡層(二)ARP和RARP

博文 拆分 detail 動態 再次 tcp 將在 ont 關於 ARP ARP(Address Resolution Protocol,地址解析協議)是將IP地址解析為以太網MAC地址(物理地址)的協議。在局域網中,當主機或其他網絡設備有數據要發送給另一個主機或設備時,它

WebApi系列WebApi如何傳遞參數

學習 路由規則 體系結構 fff 基本數據類型 xxx work 版權 小結 WebApi系列文章 【01】淺談HTTP在WebApi開發中的運用 【02】聊聊WebApi體系結構 【03】詳解WebApi參數的傳遞 【04】詳解WebApi測試和PostMan

TP3.2_initialize() 和 __construct() 的區別和聯系

instance ins 執行 構造方法 ces 實例化 direct control 初始化 1、假設 一個AdminController.class.php 集成至 \Think\Controller 類, 我們來看看Controller.class.php的構造方法源

裝飾器Python的裝飾器--為已經存在的函式或物件新增額外的功能

寫的非常好的文章,原文在:http://www.cnblogs.com/cicaday/p/python-decorator.html Python中的裝飾器是你進入Python大門的一道坎,不管你跨不跨過去它都在那裡。 為什麼需要裝飾器 我們假設你的程式實現了say_hello()和s

java細節如何刪除cookie

0x01 背景 最近做專案的登陸登出功能,需要實現單點登入和單點登出,驗證伺服器是一個龐大的第三方開源軟體,軟體的文件也不太全面,並沒有細緻的講解登出方式,導致登出用重定向返回應用後還是登陸狀態,無奈之舉要麼在伺服器端修改session失效時間,要麼看看登陸時

推薦系統基於內容的推薦演算法

作者:章華燕編輯:田 旭前言在第一篇文章《推薦演算法綜述》中我們說到,真正的推薦系統往往是多個推

機器學習中迴歸演算法

關注微信公眾號【Microstrong】,我寫過四年Android程式碼,瞭解前端、熟悉後臺,現在研究方向是機器學習、深度學習!一起來學習,一起來進步,一起來交流吧!迴歸問題:主要用於預測數值型資料,典

原生js輪播圖之無縫滾動

前言:輪播圖,是網站首頁中最常見的一種圖片切換特效,作為前端開發者,我相信很多開發者都直接呼叫了JQuery中的封裝好的方法實現圖片輪播,省事簡單。所以我今天想介紹一下原生js程式碼實現的圖片輪播。

JEECG TBSchedule應對平臺高併發的分散式排程框架TBSchedule

原文地址:http://geek.csdn.net/news/detail/65738【編者按】 TBSchedule是一款非常優秀的高效能分散式排程框架,本文是作者結合多年使用TBSchedule的經驗,在研讀三遍原始碼的基礎上完成。期間作者也與阿里空玄有過不少技術交流,並

走進CUDA~CUDA核函式及執行時引數

核函式是GPU每個thread上執行的程式。必須通過__gloabl__函式型別限定符定義。形式如下:                 __global__ void kernel(param list){  } 核函式只能在主機端呼叫,呼叫時必須申明執行引數。呼叫形式

tomcat系列tomcat架構(上篇)

java中,常用的web伺服器一般由tomcat,weblogic,jetty,undertwo等,但從使用者使用廣泛度來說,tomcat使用者量相對比較大一些,當然這也基於它開源和免費的特點。 從軟體架構的發展角度來看,軟體架構大致經歷瞭如下幾個階段(當然,我們這篇文章不是主講架構的,因此只是簡單提一下架構

評價指標F1-score與多分類MacroF1&MicroF1

文章來自:一個寶藏微信公眾號【機器學習煉丹術】 # 基本概念 首先,要背住的幾個概念就是:accuracy,precision,recal, TP,FP,TN,FN - TP:true positive。預測是正確的正樣本 - FP:false positive。預測是錯誤的正樣本 - TN:true neg

Hadoop(四)HDFS轉載

.com mapr 不能訪問 sets hba 是把 原子 linux中 x文件 原文地址:http://www.cnblogs.com/zhangyinhua/p/7657937.html 閱讀目錄(Content) 一、HDFS概述 1.1、HDFS概述 1.2、H

CLRCLR中的程序

技術分享 名稱 創建 分享 目錄名 str cut assembly dem 目錄結構: contents structure [+] 程序集的簡介 為程序集分配強名稱 如何指定程序集的版本資源信息 如何對程序集簽名 全局程序集緩存 如

OracleOracle中NLS_LANG變量的使用

make fault tro territory font pin onclick 添加 其中 目錄結構: // contents structure [-] 關於NLS_LANG參數 NSL_LANG常用的值 在MS-DOS模式和Batch模式中

VueVue生命周期

pda -a clas 文本 con 存在 操作 ef6 註意 Vue實例的生命周期全過程(圖) (這裏的紅邊圓角矩形內的都是對應的Vue實例的鉤子函數) 在beforeCreate和created鉤子函數間的生命周期 在beforeC

VueVue組件系統

最終 文件 type html中 emit 監聽 做了 駝峰命名 操作 Vue渲染的兩大基礎方式 new 一個Vue的實例 這個我們一般會使用在掛載根節點這一初始化操作上: new Vue({ el: ‘#app‘ }) 註冊組件並使用 通過

javascriptjavascript閉包 — 大家準備好瓜子,我要開始講故事啦~~

重要 參數 銷毀 弘揚 它的 bject 標題 多層嵌套 早就 前言: 在這篇文章裏,我將對那些在各種有關閉包的資料中頻繁出現,但卻又千篇一律,且曖昧模糊得讓人難以理解的表述,做一次自己的解讀。或者說是對“紅寶書”的《函數表達式/閉包》的那一章節所寫

ASP.NET系列Views

rbo mode 轉義 顯示 ora style i++ 直觀 pre 描述 本片文章內容屬於ASP.NET MVC系列視圖篇,主要講解View,大致內容如下: 1.Views文件夾講解 2.View種類 3.Razor語法 4.對視圖的基本操作 一