Django validators 驗證器完整教學
更新日期: 2025 年 1 月 7 日
本文為 留言評分功能 系列教學,第 2 篇:
- 使用 Django + Tailwind + Alpine.js 實作「五顆星評分」功能教學
- Django validators 驗證器完整教學 👈 所在位置
- Django PositiveSmallIntegerField 新手指南
- 在 esbuild 專案中整合 Alpine.js 的完整指南
- 使用 Alpine.js 建立星星評分表單 — 新手指南
- 深入理解 Alpine.js 中的 template 標籤使用指南
- Django 網站如何新增「星星評分」功能 — 後端接收邏輯
- Django 表單:如何讓使用者選擇性提交星星評分與留言
- Django 如何限制同一使用者只能對同一服務留言一次?
- Django 留言軟刪除邏輯|程式碼解析
- Django 計算評分摘要教學 — 使用 ORM 進行星等統計
- Python Django 使用 annotate、aggregate 統計教學
- 使用 Alpine.js 實作星級評分分佈 – 詳細教學
- Alpine.js 與 Tailwind CSS 動態樣式解析:為什麼有些樣式無法生效?
- Django 中使用 annotate() 與 Avg() 進行平均評分計算
在 Django 中,validators
是用來驗證資料合法性的工具。
它們的主要功能是在數據被儲存到資料庫前,進行自動檢查,確保數據符合預設的規範。
這種驗證機制能有效防止不合理的數據進入資料庫,並提升系統的穩定性與可靠性。
在這篇文章中,我們將介紹 validators
的核心概念、使用情境、常用內建驗證器以及自定義驗證器,適合 Django 新手理解並應用在實際開發中。
什麼是 validators
?
validators
是 Django 中的一種數據驗證工具,它們可以用來:
- 資料合法性檢查:
- 確保使用者輸入的數據符合要求,例如數字範圍、字串格式等。
- 當輸入的數據不合法時,系統會自動拋出錯誤訊息 (
ValidationError
),並阻止數據儲存到資料庫中。
- 防止不合理的數據進入資料庫:
- 有助於確保資料庫中的數據一致且可信。
- 例如:限制使用者評分範圍必須介於 1 到 5 之間。
validators
的運作方式
validators
在 Django 中的運作流程如下:
- 用戶提交資料:使用者透過 Django 表單或 API 提交數據。
- 觸發驗證器:Django 會自動執行模型中設定的
validators
進行數據檢查。 - 檢查數據有效性:如果數據不符合規範,系統會拋出
ValidationError
並中止保存。 - 數據儲存:若數據合法,數據會被正常儲存到資料庫中。
validators
使用範例解析
以下是一個範例,說明如何在 Django 模型中使用 validators
來限制數字範圍。
情境:
我們希望建立一個評分系統,其中 rating
欄位的分數必須介於 1 到 5 之間。
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
class Rating(models.Model):
rating = models.PositiveSmallIntegerField(
validators=[
MinValueValidator(1), # 限制最小分數為 1
MaxValueValidator(5) # 限制最大分數為 5
]
)
範例解釋:
MinValueValidator(1)
:- 驗證
rating
值不能小於 1。
- 驗證
MaxValueValidator(5)
:- 驗證
rating
值不能大於 5。
- 驗證
如何觸發驗證?
- 如果使用者輸入
6
,系統會回傳錯誤訊息並拒絕儲存。 - 如果輸入
3
,系統會正常儲存數據。
常用的內建驗證器
Django 提供了多種內建的 validators
,可用於不同類型的數據檢查需求。
MinValueValidator
- 用於檢查數值是否大於等於指定的最小值。
- 用途範例:限制年齡不得低於 18 歲。
MaxValueValidator
- 用於檢查數值是否小於等於指定的最大值。
- 用途範例:限制折扣不得超過 100%。
RegexValidator
- 使用正則表達式檢查字串格式。
- 用途範例:驗證電話號碼格式是否符合標準。
EmailValidator
- 用於檢查電子郵件地址格式是否正確。
- 用途範例:限制使用者註冊時需輸入合法的電子郵件地址。
URLValidator
- 驗證輸入的 URL 是否為有效的網址格式。
- 用途範例:用於部落格文章中的參考連結檢查。
自訂驗證器 (Custom Validators)
如果 Django 內建的 validators
無法滿足需求,你也可以定義自己的驗證器。
自訂驗證器的使用情境:
假設希望一個欄位只能輸入「奇數」,那麼可以透過自訂函數來驗證。
步驟:
- 定義一個函數,檢查數值是否為奇數。
- 如果數值不符合條件,拋出
ValidationError
。
from django.core.exceptions import ValidationError
def validate_odd(value):
if value % 2 == 0:
raise ValidationError(f'{value} 不是奇數!')
- 在模型中使用該自訂驗證器。
class Rating(models.Model):
score = models.PositiveSmallIntegerField(
validators=[validate_odd]
)
運作流程:
- 若使用者輸入偶數,系統將回傳錯誤訊息並阻止儲存數據。
- 若輸入奇數,數據將成功儲存到資料庫中。
何時使用 validators
?
validators
適用於多種情境,包括但不限於:
- 限制數字範圍(如年齡、分數、價格)
- 檢查字串格式(如電話號碼、郵遞區號)
- 電子郵件與網址驗證
- 自訂商業邏輯驗證(如奇偶數、密碼強度)
驗證器 vs. 表單驗證
雖然 validators
和 Django 表單 (forms
) 都能用於驗證數據,但兩者有不同的適用場景:
特性 | validators | 表單驗證 |
---|---|---|
位置 | 模型層 (models.py ) | 表單層 (forms.py ) |
適用範圍 | 直接驗證模型欄位 | 用於表單輸入的數據驗證 |
適合場景 | 保護數據庫完整性 | 處理前端數據有效性 |
優勢 | 全域性,適用於所有數據儲存場景 | 更靈活,適用於前端互動驗證 |
總結建議:
- 如果需要保證資料庫數據的完整性,應該使用
validators
。 - 如果只需要在前端進行輸入數據的即時檢查,使用表單驗證即可。
總結
Django 的 validators
是一個強大且靈活的工具,用於確保資料的一致性與完整性。
在這篇教學中,我們學習了:
validators
的基本概念與用途- 內建驗證器的常見範例
- 自訂驗證器的使用方法
validators
與表單驗證的差異
透過善用 validators
,你可以有效提升 Django 專案的數據質量,並防止不合理的數據進入資料庫。
如果你正在開發更複雜的表單系統,不妨結合 Django 的表單功能,以達到更完整的數據驗證效果。