Let's Django!Let's Django!

2024-03-22 :更新文章規劃,增加「Django Ninja」相關文章。同時重新編輯全文,刪除部分內容,使文章更緊湊、好讀。

這是 Django Tutorial 系列的第 0 篇——序言。主要說明整個系列的寫作動機、文章規劃,並介紹 GitHub 倉庫的使用方式。

本站所有 Django 教學文章,已整理於 Django 文章總覽


系列寫作動機

雖然在工作上寫了 2 年 Django,對 Django 的文章介紹卻非常少。

作為一個 Django 開發者兼作者,讓我不免覺得,自己有「義務」做些什麼。經過一番思考,我決定把工作中常見的 Django 實作寫成文章。

尤其繁體中文世界對於 Django 的介紹,大多停留在製作整個網站(主要介紹模板、Form、View),而不是開發 API——用 Django 開發 API 的相關教材太少了。

這個現象不難理解,因為在台灣使用 Django 作為產品主要後端的公司相對有限,所以文章分享自然就不是那麼多。

而工作中你幾乎不太可能用 Django 來開發整個網站,畢竟這是個前後端分離的時代。

想到這裡,寫作 Django 系列教學的動力又提升了!這或許就是我的使命

目標讀者

因此,這系列文章主要針對那些已有 Python 基礎,但想要進一步了解 Django 網頁開發,尤其是「用 Django 開發 Web API」的讀者。

畢竟開發 API 才是我的 Django 日常。

所以我不得不遺憾地表示,這個系列將不會有任何關於「Django 模板、表單」元件等介紹,也不會討論上述元件與 Django View 的整合議題。

而是完全以「API」為核心。


文章規劃

目前計畫分成多個部分,每個部分有多篇文章。

一、Django ORM 三部曲

無論全端還是前後端分離,Django ORM 的重要性與地位都不會有任何影響,所以 ORM 三部曲自然還是要一一介紹。

目前規劃的文章為:

  1. Django ORM:一對一、一對多外鍵教學(上)前言與關聯設定
  2. Django ORM:一對一、一對多外鍵教學(中)反向關聯
  3. Django ORM:一對一、一對多外鍵教學(下)查詢篇

而且,整個 Django 框架中,我最愛的部分就是 Django ORM——它強大而優雅

二、pytest 單元測試

我相信,沒有單元測試的開發,是「不健全」的開發。

自己的程式自己測,優秀的開發者不會把「低級錯誤」留給 QA,讓 QA 當保姆。

哪怕只是最基本的,為每一個 API 加上 200 回傳值的單元測試,都遠比沒有來得強。有了測試以後,再來就是覆蓋率報告。

文章預計如下:

  1. Django 測試指南:用 pytest 撰寫 API 單元測試——環境設定篇
  2. Django 測試指南:用 pytest 撰寫 API 單元測試——Fixtures 篇
  3. Django 測試指南:使用 pytest + pytest-cov 計算 Test Coverage

三、Django API

2024-03-22更新:因為工作上的新專案皆已轉向 Django Ninja,所以我會以 Django Ninja 為主,但也會有一些 DRF 的文章。

講到 Django API,就不得不提 Django REST framework(下稱 DRF),尤其是它提供的 API view(無論 CBV 或 FBV)與序列化器

當然,時代在變,如今開發 Django API 並非只能選擇 DRF,受到 FastAPI 啟發而誕生的後起之秀——Django Ninja,也值得你一試。

尤其它支援 Pydantic,可以依程式碼自動生成 API 文件。你可以簡單想成,它就像是「Django 版的 FastAPI」。

預計主題有下,目前文章標題皆未定:

  • Django Ninja 教學:路由設定
  • Django Ninja 教學:自動生成 API 文件
  • Django Ninja 教學:API 與序列化
  • 用 DRF 開發 Django API
  • DRF 序列化器
  • 檔案上傳
  • DRF 分頁(Pagination)

如你所見,這並不是一個「大而全」的 Django 教學,而是以我自己的實務經驗為主,介紹我認為最重要且相對熟悉的部分。

主要的目標是讓讀者可以快速上手,並了解 Django API 開發的基本概念。

四、Django 通用功能

無論是後端 API 開發還是全端開發,都會有的通用主題,比如:


範例程式碼 GitHub 專案介紹

最後,介紹與整個系列教學直接相關的 GitHub repository——Django-Tutorial

這個專案的定位是「讓有讀者實際程式碼可以參考」,所以基本上是拿來「看」的。但我會讓它也能夠真正運行,以方便想要自己動手嘗試的讀者。

我相信這對學習大有幫助。

分支功能

專案中會有許多分支,採<流水號-文章slug>的模式命名,比如:

1
01-django-models

分支主要是作為歷史記錄之用,以及快速查看該分支所對應的程式碼修改

包括本站其它教學範例

附帶一提,分支記錄「並非只限」Django Tutorial 系列文章,本站別的文章也會有!

比如我某篇文章要講解「專案容器化」,用現有的專案來進行示範無疑再好不過,所以也會變動專案程式碼並留下分支記錄:

1
02-dockerize