資料驗證(下)Pydantic 跨欄位驗證

這是 Django Ninja 系列教學的第 20 篇。
上一篇我們講完了單一欄位的自定義驗證,這篇則要來討論跨欄位之間的驗證。
跨欄位驗證同樣是 API 開發中十分常見的需求,例如註冊帳號時,要保證「密碼」與「確認密碼」兩個欄位內容相同;選擇日期期間時,開始日期不能晚於結束日期等。
這些驗證場景無法透過單一欄位驗證實現,因為它們需要同時檢查多個欄位之間的邏輯關聯,來確保整體資料的一致性和正確性。
本文將介紹如何透過 Pydantic 來實現跨欄位驗證需求——以「確認密碼」為例,展示這個功能的實際應用。
本文所有的程式碼改動,可參考這個 PR。
快速導覽
👉 完整系列目錄:點此查看
👉 程式碼範例:GitHub 範例專案
跨欄位驗證與關注點分離
其實,無論是單一欄位還是跨欄位的自定義驗證,都不一定要藉由 Pydantic 來完成。
理論上,資料驗證可以直接在 view 函式中進行,例如取出輸入的欄位值,手動驗證它的合法性。跨欄位驗證也是如此。
然而,這是一種方便但「粗糙」的做法——只適合用在驗證邏輯非常單純的情況。
透過 Pydantic 進行資料驗證,則能夠帶來一個明顯的好處:關注點分離。