一、明確REST介面開發的核心任務
分析一下上節的案例,可以發現,在開發REST API介面時,視圖中做的最主要有三件事:
- 將請求的資料(如JSON格式)轉換為模型類物件
- 操作資料庫
- 將模型類物件轉換為回應的資料(如JSON格式)
1.1 序列化Serialization
維基百科中對于序列化的定義:
序列化(serialization)在計算機科學的資料處理中,是指將資料結構或物件狀態轉換成可取用格式(例如存成檔案,存于緩沖,或經由網路中傳送),以留待后續在相同或另一臺計算機環境中,能恢復原先狀態的程序,依照序列化格式重新獲取位元組的結果時,可以利用它來產生與原始物件相同語意的副本,對于許多物件,像是使用大量參照的復雜物件,這種序列化重建的程序并不容易,面向物件中的物件序列化,并不概括之前原始物件所關聯的函式,這種程序也稱為物件編組(marshalling),從一系列位元組提取資料結構的反向操作,是反序列化(也稱為解編組, deserialization, unmarshalling),
序列化在計算機科學中通常有以下定義:
在資料儲存與傳送的部分是指將一個物件存盤至一個儲存媒介,例如檔案或是記億體緩沖等,或者透過網路傳送資料時進行編碼的程序,可以是位元組或是XML等格式,而位元組的或XML編碼格式可以還原完全相等的物件,這程式被應用在不同應用程式之間傳送物件,以及服務器將物件儲存到檔案或資料庫,相反的程序又稱為反序列化,
簡而言之,我們可以將序列化理解為:
將程式中的一個資料結構型別轉換為其他格式(字典、JSON、XML等),例如將Django中的模型類物件裝換為JSON字串,這個轉換程序我們稱為序列化,
如:
queryset = BookInfo.objects.all()
book_list = []
# 序列化
for book in queryset:
book_list.append({
'id': book.id,
'btitle': book.btitle,
'bpub_date': book.bpub_date,
'bread': book.bread,
'bcomment': book.bcomment,
'image': book.image.url if book.image else ''
})
return JsonResponse(book_list, safe=False)
反之,將其他格式(字典、JSON、XML等)轉換為程式中的資料,例如將JSON字串轉換為Django中的模型類物件,這個程序我們稱為反序列化,
如:
json_bytes = request.body
json_str = json_bytes.decode()
# 反序列化
book_dict = json.loads(json_str)
book = BookInfo.objects.create(
btitle=book_dict.get('btitle'),
bpub_date=datetime.strptime(book_dict.get('bpub_date'), '%Y-%m-%d').date()
)
我們可以看到,在開發REST API時,視圖中要頻繁的進行序列化與反序列化的撰寫,
1.2 總結
在開發REST API介面時,我們在視圖中需要做的最核心的事是:
- 將資料庫資料序列化為前端所需要的格式,并回傳;
- 將前端發送的資料反序列化為模型類物件,并保存到資料庫中,
二、Django REST framework 簡介
- 在序列化與反序列化時,雖然操作的資料不盡相同,但是執行的程序卻是相似的,也就是說這部分代碼是可以復用簡化撰寫的,
- 在開發REST API的視圖中,雖然每個視圖具體操作的資料不同,但增、刪、改、查的實作流程基本套路化,所以這部分代碼也是可以復用簡化撰寫的:
- 增:校驗請求資料 -> 執行反序列化程序 -> 保存資料庫 -> 將保存的物件序列化并回傳
- 刪:判斷要洗掉的資料是否存在 -> 執行資料庫洗掉
- 改:判斷要修改的資料是否存在 -> 校驗請求的資料 -> 執行反序列化程序 -> 保存資料庫 -> 將保存的物件序列化并回傳
- 查:查詢資料庫 -> 將資料序列化并回傳
Django REST framework可以幫助我們簡化上述兩部分的代碼撰寫,大大提高REST API的開發速度,
認識Django REST framework

Django REST framework 框架是一個用于構建Web API 的強大而又靈活的工具,
通常簡稱為DRF框架 或 REST framework,
DRF框架是建立在Django框架基礎之上,由Tom Christie大牛二次開發的開源專案,
特點
- 提供了定義序列化器Serializer的方法,可以快速根據 Django ORM 或者其它庫自動序列化/反序列化;
- 提供了豐富的類視圖、Mixin擴展類,簡化視圖的撰寫;
- 豐富的定制層級:函式視圖、類視圖、視圖集合到自動生成 API,滿足各種需要;
- 多種身份認證和權限認證方式的支持;
- 內置了限流系統;
- 直觀的 API web 界面;
- 可擴展性,插件豐富
資料:
- 官方檔案
- Github原始碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/122691.html
標籤:Python
上一篇:04.DRF-開發REST 介面
下一篇:Python背景關系管理器
