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裝飾器可以接收兩個引數:
- methods: 該action支援的請求方式,列表傳遞
- 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
【CLR】詳解CLR中的程序集
技術分享 名稱 創建 分享 目錄名 str cut assembly dem 目錄結構: contents structure [+] 程序集的簡介 為程序集分配強名稱 如何指定程序集的版本資源信息 如何對程序集簽名 全局程序集緩存 如
【Oracle】詳解Oracle中NLS_LANG變量的使用
make fault tro territory font pin onclick 添加 其中 目錄結構: // contents structure [-] 關於NLS_LANG參數 NSL_LANG常用的值 在MS-DOS模式和Batch模式中
【Vue】詳解Vue生命周期
pda -a clas 文本 con 存在 操作 ef6 註意 Vue實例的生命周期全過程(圖) (這裏的紅邊圓角矩形內的都是對應的Vue實例的鉤子函數) 在beforeCreate和created鉤子函數間的生命周期 在beforeC
【Vue】詳解Vue組件系統
最終 文件 type html中 emit 監聽 做了 駝峰命名 操作 Vue渲染的兩大基礎方式 new 一個Vue的實例 這個我們一般會使用在掛載根節點這一初始化操作上: new Vue({ el: ‘#app‘ }) 註冊組件並使用 通過
【javascript】詳解javascript閉包 — 大家準備好瓜子,我要開始講故事啦~~
重要 參數 銷毀 弘揚 它的 bject 標題 多層嵌套 早就 前言: 在這篇文章裏,我將對那些在各種有關閉包的資料中頻繁出現,但卻又千篇一律,且曖昧模糊得讓人難以理解的表述,做一次自己的解讀。或者說是對“紅寶書”的《函數表達式/閉包》的那一章節所寫
【ASP.NET系列】詳解Views
rbo mode 轉義 顯示 ora style i++ 直觀 pre 描述 本片文章內容屬於ASP.NET MVC系列視圖篇,主要講解View,大致內容如下: 1.Views文件夾講解 2.View種類 3.Razor語法 4.對視圖的基本操作 一