咱們首先來回顧一下傳統的基於模板引擎的 django 開發工做流:數據庫
-
綁定 URL 和視圖函數。當用戶訪問某個 URL 時,調用綁定的視圖函數進行處理。
-
-
在視圖中渲染 HTML 模板,返回 HTTP 響應。
其實,基於 django-rest-framework 的 RESTful API 的開發,過程是徹底相似的:django
-
綁定 URL 和視圖函數。當用戶訪問某個 URL 時,調用綁定的視圖函數進行處理。
-
編寫視圖函數的邏輯,根據 HTTP 請求類型,對請求的資源進行相應操做,這個過程一般涉及數據庫的操做。
-
使用約定的資源描述格式(例如 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 的學習之旅吧!函數