Django validators 驗證器完整教學

更新日期: 2025 年 1 月 7 日

在 Django 中,validators 是用來驗證資料合法性的工具。

它們的主要功能是在數據被儲存到資料庫前,進行自動檢查,確保數據符合預設的規範。

這種驗證機制能有效防止不合理的數據進入資料庫,並提升系統的穩定性與可靠性。

在這篇文章中,我們將介紹 validators 的核心概念、使用情境、常用內建驗證器以及自定義驗證器,適合 Django 新手理解並應用在實際開發中。


什麼是 validators

validators 是 Django 中的一種數據驗證工具,它們可以用來:

  1. 資料合法性檢查
    • 確保使用者輸入的數據符合要求,例如數字範圍、字串格式等。
    • 當輸入的數據不合法時,系統會自動拋出錯誤訊息 (ValidationError),並阻止數據儲存到資料庫中。
  2. 防止不合理的數據進入資料庫
    • 有助於確保資料庫中的數據一致且可信。
    • 例如:限制使用者評分範圍必須介於 1 到 5 之間。

validators 的運作方式

validators 在 Django 中的運作流程如下:

  1. 用戶提交資料:使用者透過 Django 表單或 API 提交數據。
  2. 觸發驗證器:Django 會自動執行模型中設定的 validators 進行數據檢查。
  3. 檢查數據有效性:如果數據不符合規範,系統會拋出 ValidationError 並中止保存。
  4. 數據儲存:若數據合法,數據會被正常儲存到資料庫中。

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 無法滿足需求,你也可以定義自己的驗證器。

自訂驗證器的使用情境:

假設希望一個欄位只能輸入「奇數」,那麼可以透過自訂函數來驗證。

步驟:

  1. 定義一個函數,檢查數值是否為奇數。
  2. 如果數值不符合條件,拋出 ValidationError
from django.core.exceptions import ValidationError

def validate_odd(value):
    if value % 2 == 0:
        raise ValidationError(f'{value} 不是奇數!')
  1. 在模型中使用該自訂驗證器。
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 的表單功能,以達到更完整的數據驗證效果。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *