【零】DRF在Django專案中的使用
【1】匯入
# DRF需要使用pip install 安裝
pip install djangorestframework
- DRF(Django Rest Framework)是一個用於構建 Web API 的工具包,它是基於 Django 框架的一個第三方應用(app)
- 在 Django 專案中,一個應用(app)通常是一個具有特定功能的模組,它包含了模型、檢視、模板等元件,用於實現特定的功能或業務邏輯。
【2】使用
- 使用drf時,需要先在
settings.py
檔案中進行註冊app
# settings.py
INSTALLED_APPS = [
...
'rest_framework'
]
【一】View
- restful規範所需5個介面
- 查詢所有
- 新增
- 查詢單條資料
- 更新單條
- 刪除單條
【1】基於Django的View實現5個介面
-
DRF_prospect · Lea4ning/DjangoObject - 碼雲 - 開源中國 (gitee.com)
-
程式碼預覽
- 預處理請求資料的裝飾器程式碼
- 【注】該版本如果使用post請求,需要註釋掉csrf中介軟體
【2】基於DRF.APIView + Response實現5個介面
-
使用Django自帶的View我們可以發現,其對請求資料的處理不夠完善
-
而在DRF中,其幫我們處理了請求資料,能夠讓我們可以透過【request.data】直接獲取到三種編碼格式處理後的資料
-
【request.data】中的資料可能為【querydict】或【dict】物件
-
程式碼預覽
【2.1】APIView原始碼分析
- 檢視類呼叫時,就是執行【as_view()】方法
- 【as_view()】就是我們檢視APIView原始碼的入口
【2.1.1】DRF的APIView的as_view()
【2.1.2】Django的View的as_view()
【2.1.3】DRF的APIView的dispatch()
【2.1.3.1】包裝新的request
- Request類例項化物件的
__init__
方法
【2.1.4】APIView的request物件
- APIView的request物件相較於django的request物件多了一些屬性
- 常用的(以下的reuqest均為APIView的request物件)
request.data
:獲取請求體中的資料,以QueryDict形式或Dict形式返回request.query_params
:與django的request物件中的.GET
方法一致
- 當獲取APIView的request物件中沒有的屬性時,將會觸發
__getattr__
方法
【2.1.5】原始碼存疑的地方
- 如果再呼叫
self.__getattribute__
獲取屬性,好像沒有什麼必要,肯定是會報錯的,為什麼要多做一個異常捕獲,然後再丟擲一個異常呀