Django-rest-framework 是個什麼鬼?

Django-rest-framework 是個什麼鬼?

作者:HelloGitHub-追夢人物

文中所涉及的示例代碼,已同步更新到 HelloGitHub-Team 倉庫

我們首先來回顧一下傳統的基於模板引擎的 django 開發工作流:

  1. 綁定 URL 和視圖函數。當用戶訪問某個 URL 時,調用綁定的視圖函數進行處理。
  2. 編寫視圖函數的邏輯。視圖中通常涉及數據庫的操作。
  3. 在視圖中渲染 HTML 模板,返回 HTTP 響應。

其實,基於 django-rest-framework 的 RESTful API 的開發,過程是完全類似的:

  1. 綁定 URL 和視圖函數。當用戶訪問某個 URL 時,調用綁定的視圖函數進行處理。
  2. 編寫視圖函數的邏輯,根據 HTTP 請求類型,對請求的資源進行相應操作,這個過程通常涉及數據庫的操作。
  3. 使用約定的資源描述格式(例如 XML 或者 JSON)序列化資源並將數據返回給客戶端(通過 HTTP 響應)。

對比發現,前兩步幾乎是完全相同的。不同點在於,在傳統的基於模板引擎的開發方式中,資源使用 HTML 文檔進行描述並返回給客戶端,而在 RESTful API 的開發方式中,資源通常被描述為 JSON 或者 XML 的格式返回給客戶端。

有的同學就要問了,雖然 django 的視圖函數通常情況下返回 HTML 文檔的響應,但是 django 也支持返回 XML 格式或者 JSON 格式的響應,那麼為什麼還要使用 django-rest-framework 呢?

事實上,的確能夠在 django 中返回 JSON 或者 XML 格式的數據,但是 django 框架本身只提供了十分基礎的功能。django-rest-framework 是基於 django 的拓展,專為 RESTful API 的開發而設計,提供了十分豐富的輔助類和函數,幫助我們方便地開發 API。下面就來簡單介紹 django-rest-framework 為我們提供了哪些功能特性,這些功能和特性我們在接下來的實戰中會進一步學習其用法,這裡可以先從宏觀層面,做一個簡單的瞭解。

  • 內容協商(Content Negotiation)。之前說過,在 RESFful 架構的系統中,資源以某種描述形式在客戶端和服務器之間傳遞,django-rest-framework 根據客戶端能夠接受的資源格式,自動使用合適的資源描述工具,返回客戶端可接受的資源。
  • 認證與鑑權(Authentication and Permission)。客戶端對資源的操作通常是受限的,有些資源只能由經過身份認證或具有相應權限的用戶才能操作,django-rest-framework 提供了豐富的認證類和鑑權類,幫助我們對用戶的身份和權限進行校驗。
  • 序列化(Serialization)。django 基於 Python 語言開發,因此資源通常由 Python 對象描述,那麼在傳遞給客戶端時,就要進行轉換,例如將 Python 對象轉換為 JSON 字符串,這個過程就叫做序列化。django 內置的序列化器功能有限,django-rest-framework 提供了功能更加豐富和強大的序列化器,讓資源的序列化工作變得異常簡單。
  • 各種通用視圖(Generic Views)。django 針對 Web 開發中常見的處理邏輯,提供了各種通用視圖函數,以提高代碼的複用性,減少開發者的工作量。django-rest-framework 同樣針對 RESTful API 開發中常見的處理邏輯,提供了各種通用視圖函數。
  • 路由自動生成器(Router)。django-rest-framework 根據編寫的視圖函數,自動生成符合 RESTful 設計的 URL 路由。
  • 文檔(Documentation)。django-rest-framework 基於 OpenAPI 模式自動生成 API 文檔,無需我們手動編寫和維護。

除此以外,django-rest-framework 還提供了分頁(Pagination)、API 版本控制(Versioning)、緩存(Caching)、限流(Throtting)等各種功能類。

在接下來的實戰教程中,我們會逐一的學習並使用它們。

讓我們正式開啟 django-rest-framework 的學習之旅吧!

Django-rest-framework 是個什麼鬼?

『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟著我們的文章,你會發現編程的樂趣、使用和發現參與開源項目如此簡單。歡迎留言聯繫我們、加入我們,讓更多人愛上開源、貢獻開源~


分享到:


相關文章: