1. 程式人生 > >關於django 之 drf 中的 檢視集

關於django 之 drf 中的 檢視集

檢視集ViewSet

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

  • list() 提供一組資料
  • retrieve() 提供單個數據
  • create() 建立資料
  • update() 儲存資料
  • destory() 刪除資料

ViewSet檢視集類不再實現get()、post()等方法,而是實現動作 action 如 list() 、create() 等。

檢視集只在使用as_view()方法的時候,才會將action動作與具體請求方式對應上。如:

class BookInfoViewSet(viewsets.ViewSet):

    def list(self, request):
        ...

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

在設定路由時,我們可以如下操作

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

action屬性

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

例如:

def get_serializer_class
(self):
if self.action == 'create': return OrderCommitSerializer else: return OrderDataSerializer

常用檢視集父類

1) ViewSet

繼承自APIView,作用也與APIView基本類似,提供了身份認證、許可權校驗、流量管理等。

在ViewSet中,沒有提供任何動作action方法,需要我們自己實現action方法。

2)GenericViewSet

繼承自GenericAPIView,作用也與GenericAPIVIew類似,提供了get_object、get_queryset等方法便於列表檢視與詳情資訊檢視的開發。

3)ModelViewSet

繼承自GenericAPIVIew,同時包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

4)ReadOnlyModelViewSet

繼承自GenericAPIVIew,同時包括了ListModelMixin、RetrieveModelMixin。

檢視集中定義附加action動作

在檢視集中,除了上述預設的方法動作外,還可以新增自定義動作。

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

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

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

  • methods: 該action支援的請求方式,列表傳遞
  • detail: 表示是action中要處理的是否是檢視資源的物件(即是否通過url路徑獲取主鍵)
    • True 表示使用通過URL獲取的主鍵對應的資料物件
    • False 表示不使用URL獲取主鍵

舉例:

from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet
from rest_framework.decorators import action

class BookInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer

    # detail為False 表示不需要處理具體的BookInfo物件
    @action(methods=['get'], detail=False)
    def latest(self, request):
        """
        返回最新的圖書資訊
        """
        book = BookInfo.objects.latest('id')
        serializer = self.get_serializer(book)
        return Response(serializer.data)

    # detail為True,表示要處理具體與pk主鍵對應的BookInfo物件
    @action(methods=['put'], detail=True)
    def read(self, request, pk):
        """
        修改圖書的閱讀量資料
        """
        book = self.get_object()
        book.bread = request.data.get('read')
        book.save()
        serializer = self.get_serializer(book)
        return Response(serializer.data)

url的定義

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

相關推薦

關於django drf 檢視

檢視集ViewSet使用檢視集ViewSet,可以將一系列邏輯相關的動作放到一個類中:list() 提供一組資料retrieve() 提供單個數據create() 建立資料update() 儲存資料destory() 刪除資料ViewSet檢視集類不再實現get()、post

068.Python框架DjangoDRF檢視使用

一 檢視集與路由的使用 使用檢視集ViewSet,可以將一系列邏輯相關的動作放到一個類中: list() 提供一組資料 retrieve() 提供單個數據 create() 建立資料 update() 儲存資料 destory() 刪除資料   ViewSet檢視集類不再實現get()

Djangoadmin管理models的表格

操作 界面 文件夾 .com model 註冊 png 登錄 技術 Django之admin中管理models中的表格   django中使用admin管理models中的表格時,如何將表格註冊到admin中呢? 具體操作就是在項目文件夾中的app文件夾中的adm

djangoadmin使用markdown編輯器,並實時預覽一

安裝django-markdownx Macos:直接pip install django-mrakdownx;Ubuntu需要先安裝pillow,參考此連結。 按照官方教程設定,不同的是本文markdownx的widget如下設定,在專案的temp

DRF--【檢視】詳解

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

django DRF restful

先說說restful把 :什麼是RESTFul架構: 如果一個架構符合REST原則,就稱它為RESTful架構。要理解RESTful架構,理解Representational State Transfer這三個單詞的意思。具象的,就是指表現層,要表現的物件也就是“資源”,什麼

djangoadmin使用markdown編輯器,並實時預覽二

解決圖片上傳問題 解決url路徑出錯問題 設定了MARKDOWNX_MEDIA_PATH = 'media/markdownx/img'以後,圖片顯示仍然有問題。 markdown

Django -- DRF 檢視 詳解

兩個基類的介紹 Ⅰ. APIView 介紹: APIView是REST framework提供的所有檢視的基類,繼承自Django的View父類。 APIView與View的不同之處在於: 傳入到檢視方法中的是REST framework的Request物件,而不是D

python-關於django檢視檢視概括

==================================================檢視 Django REST framework提供的檢視主要作用"     控制序列化器的執行(檢驗,儲存,轉換資料)     控制資料庫查詢的執行 ===========

django 學習DRF (三)

完全 字段 ali 兩個 gis 說明 技術 英雄 實現 Django學習之DRF-03視圖集 1.視圖集介紹 2.視圖集基本使? 1.需求 使?視圖集獲取列表數據和單?數據 2.實現 class BookInfoViewSet(m

django成七牛雲對象存儲

固定 文件上傳 項目 10gb ken true 保留 ron 雲服務 Python3 + Django2.0 集成 “七牛雲” 對象存儲 (SDK文檔地址:http://developer.qiniu.com/kodo/api/3928/error-responses)

django百度Ueditor富文本編輯器後臺

使用 vid n) 版本 config prototype -type aid == Python3 + Django2.0 百度Ueditor 富文本編輯器的集成 百度富文本編輯器官網地址:http://fex.baidu.com/ueditor/ 疑問:為什麽要二次

Djangoviews檢視函式

views檢視函式屬於MTV中邏輯處理的部分檢視函式包含著兩個物件,HttpRequest物件和HttpResponse物件 一.HttpRequest物件 HttpRequest物件在Django中會預設傳到views函式中作為第一個引數 HttpRequest的屬性:

[引擎]四:unity檢視簡單mesh頂點順序的小工具——修改

https://blog.csdn.net/yanchezuo/article/details/78978884 1 新增檢視頂點位置和uv資訊 2 相容頂點數量和uv數量不同的情況 3 新增是否顯示資訊的選項 4 完整程式碼 5 最後 這裡製作的小工具,功能有點單薄,只能檢視頂點的順序。&nb

DRF檢視的使用

# 原創,轉載請留言聯絡   如果要把同一種http請求方法的多個介面放在同一個檢視中,比如:查詢多條資料和一條資料都是get請求,放在同一個視圖裡,應該怎麼做呢??? 如果直接放在一起,會怎樣呢? # 檢視: class DepartmentTestView(ListAPIView,

四十二、python學習Django框架(二):類檢視與中介軟體

五、類檢視: 1.類檢視引入: 以函式的方式定義的檢視成為函式檢視,即我們常說的檢視函式. 但是, 檢視函式遭遇不同的請求方法(如get和post),並且需要做不同的處理時,我們如果在一個函式中編寫不同的業務邏輯,程式碼可讀性和複用性都不好. 例如:

django全域性預設設定檢視及admin語言設定

django之admin語言設定   admin後臺管理預設使用的是英文,有時我們需要將其設定成自己的語言以方便使用管理;    將 LANGUAGE_CODE = '' 設定為欲設定的語言即可。   以下為django原始碼中給定的語言可選項: # Languages we

drf檢視的理解

檢視集ViewSet 使用檢視集ViewSet,可以將一系列邏輯相關的動作放到一個類中: list() 提供一組資料 retrieve() 提供單個數據 create() 建立資料 update() 儲存資料 destory() 刪除資料 ViewSet檢視集類不再實現get(

Django通用檢視APIView和檢視ViewSet的介紹和使用

1.APIView DRF框架的檢視的基類是 APIView APIView的基本使用和View類似 Django預設的View請求物件是 HttpRequest,REST framework 的請求物件是 Request。 Request物件的資料是自動

Djangourl使用小技巧、專案類檢視

我先說一下url中踩過的坑 1.url中的’r’是什麼意思?例如:url(r'^index/', views.index), 正則表示式字串的開頭字母“r”。 它告訴Python這是個原始字串,不需要處理裡面的’/‘反斜槓(轉義字元)。 在普通Python字串中,反斜槓用於特殊字元的轉義。比