DRF Django REST framework 之 APIView(一)


什么是REST?

REST是一個標准,一種規范,遵循REST風格可以使開發的接口通用,便於調用者理解接口的作用。

使url更容易理解,讓增刪改清晰易懂,在前后端分離開發中按照這一規范能加快開發效率,減少不必要的討論時間。

  • GET:          獲取特定資源(通過ID)或資源集合
  • POST:   創建一個新資源
  • PUT:          更新特定資源(通過ID)
  • DELETE:    按ID刪除特定資源

詳情可見:https://baike.baidu.com/item/rest/6330506

可以理解為: URL唯一代表資源,HTTP請求方式來區分用戶行為。

URL的設計規范:
GET:     127.0.0.1:9001/books/	       獲取所有數據
GET:    127.0.0.1:9001/books/{id}     獲取單條數據
POST:    127.0.0.1:9001/books/	      增加數據
DELETE:  127.0.0.1:9001/books/{id}     刪除數據
PUT:     127.0.0.1:9001/books/{id}     修改數據

數據響應規范:
GET:     127.0.0.1:9001/books/	     返回[{}, {}, {}]
GET:      127.0.0.1:9001/books/{id}    {} 單條數據
POST:    127.0.0.1:9001/books/	      {} 添加成功的數據
DELETE:   127.0.0.1:9001/books/{id}    "" 返回空
PUT:      127.0.0.1:9001/books/{id}    {} 更新后完整的數據

錯誤處理:
{ "error": "message" }

 DRF

DRF (Django REST framework)Django REST框架是用於構建Web API的工具, 是功能強大且靈活的工具包。

通常簡稱為DRF框架 或 REST framework。DRF框架是建立在Django框架基礎之上,由Tom Christie大牛二次開發的開源項目。

DRF中有封裝了十大組件,分別是序列化組件,視圖組件,認證組件,權限組件,頻率組件,解析器,分頁器,響應器,url控制器,版本控制。這十大組件,能夠很好的幫助開發人員提升開發效率。

可以用來實現前后端分離的項目

APIView

 APIView 是DRF概念體系中最基本類視圖,也是所有視圖的基類,繼承自Django的 View 父類。

 APIView 與 View 的不同之處在於:

  • 傳入到視圖方法中的是REST framework的 Request 對象,而不是Django的 HttpRequeset 對象;
  • 視圖方法可以返回REST framework的 Response 對象,視圖會為響應數據設置 render 符合前端要求的格式;
  • 任何 APIException 異常都會被捕獲到,並且處理成合適的響應信息;
  • 在進行 dispatch() 分發前,會對請求進行身份認證、權限檢查、流量控制
支持定義的屬性:
  •  authentication_classes  列表或元祖,身份認證類
  •  permissoin_classes  列表或元祖,權限檢查類
  •  throttle_classes  列表或元祖,流量控制類

在 APIView 中仍以常規的類視圖定義方法來實現 get()  、 post()  或者其他請求方式的方法。

APIView源碼分析

1. 路由層調用 as_view() 方法

2. 由於視圖類 LoginView 類沒有 as_view() 方法,所以去父類APIView中找

執行View里的 as_view() 方法

3.  as_view() 最終還是執行類 APIView 里的 dispatch() 方法。

4. 通過 initialize_request() 將原生 request 封裝到 Request 中,依次執行 initial() 里面的認證,權限,概率組件

5.  Request 類做了什么

把一些常用的方法重新封裝了,如GET方法封裝成了query_params,並偽裝成屬性。

6. 最后通過映射進行分發,並返回

DRF的關鍵就是重寫了 dispatch 方法,在 dispatch 中對原生的 request 進行了封裝,然后通過 initial() 方法來執行認證,權限,頻率的控制。


免責聲明!

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



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