ホームページ > バックエンド開発 > Python チュートリアル > Djangoのフィールド検証の技術

Djangoのフィールド検証の技術

Mary-Kate Olsen
リリース: 2025-01-27 00:15:09
オリジナル
652 人が閲覧しました

Techniques for Field Validation in Django

Django フォーム データの検証は、Web 開発における重要なリンクであり、収集されたユーザー データがアプリケーションの要件を満たしていることを確認します。 Django にはさまざまなフィールド検証メソッドが用意されており、この記事ではそれについて順を追って説明します。

  1. フィールドパラメータを使用する

Django フォーム フィールドを定義する場合、通常はフィールド パラメーターを通じて検証ルールを直接指定できます。

たとえば、first_name フィールドの最大長が 100 文字であることを確認してください。 CharField なので、max_length パラメータを使用できます:

<code class="language-python">from django import forms

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)</code>
ログイン後にコピー

これは、最も単純で最も一般的に使用される検証方法の 1 つです。

  1. 組み込みバリデータを使用する

Django の組み込みバリデーターは、特定の検証チェックを実行する再利用可能な呼び出し可能なオブジェクトです。

age フィールドの最小値が 18 であることを確認したいとします。 min_value パラメーターを直接使用することもできますが、ここでは Django の MinValueValidator を使用する方法のデモンストレーションを示します。

<code class="language-python">from django import forms
from django.core.validators import MinValueValidator

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)
    age = forms.IntegerField(validators=[MinValueValidator(18)])</code>
ログイン後にコピー
Django の

モジュールは、最小値/最大値のチェック、正規表現の検証などのタスク用に、事前に構築された複数のバリデーターを提供します。 validators

  1. カスタムバリデーターの作成

場合によっては、組み込みバリデーターでは処理できない、より複雑な検証ロジックが必要になることがあります。この場合、カスタムバリデータを作成することが可能です。

バリデーターは、値を受け取り、値が基準を満たさない場合に

を発生させる呼び出し可能なオブジェクトです。たとえば、数値が偶数であることを確認するバリデータを作成します。ValidationError

<code class="language-python">from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator

def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(f"{value} 不是偶数")

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)
    age = forms.IntegerField(validators=[MinValueValidator(18)])
    even_field = forms.IntegerField(validators=[validate_even])</code>
ログイン後にコピー

ヒント: コードを整理しておくために、カスタム バリデータを などの別のファイルに配置することを検討してください。プロジェクトの規模によって異なります。 validators.py

  1. メソッドを使用しますclean_<fieldname>()

フィールド検証のもう 1 つの強力な方法は、フォーム クラスの

メソッドをオーバーライドすることです。このメソッドは、単一のフォームに固有の検証ロジックに特に役立ちます。 clean_<fieldname>()

たとえば、フォーム内で

フィールドを直接検証するには: even_field

<code class="language-python">from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)
    age = forms.IntegerField(validators=[MinValueValidator(18)])
    even_field = forms.IntegerField()

    def clean_even_field(self):
        even_field_validated = self.cleaned_data.get("even_field")
        if even_field_validated % 2 != 0:
            raise ValidationError(f"{even_field_validated} 不是偶数")
        return even_field_validated</code>
ログイン後にコピー
このメソッドは、フィールドのサニタイズされたデータへの直接アクセスを提供し、検証をより細かく制御できます。

  1. メソッドclean()

検証では、フォーム内の複数のフィールド間の関係を考慮する必要がある場合があります。たとえば、フィールドが 2 つあり、一方のフィールドの文字数が他方のフィールドよりも多いことを確認する必要があるとします。このタイプの検証は、単一のフィールドだけでなく複数のフィールドの値に依存するため、

フォームレベルの検証と呼ばれます。

これを行うには、フォーム クラスの

メソッドをオーバーライドします。 clean()

<code class="language-python">from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)
    age = forms.IntegerField(validators=[MinValueValidator(18)])
    even_field = forms.IntegerField()
    field1 = forms.CharField()
    field2 = forms.CharField()

    def clean_even_field(self):
        even_field_validated = self.cleaned_data.get("even_field")
        if even_field_validated % 2 != 0:
            raise ValidationError(f"{even_field_validated} 不是偶数")
        return even_field_validated

    def clean(self):  # 表单级验证
        cleaned_data = super().clean()
        field1_value = cleaned_data.get("field1")
        field2_value = cleaned_data.get("field2")

        if field1_value and field2_value and len(field1_value) >= len(field2_value):
            raise ValidationError("field2 字符数必须多于 field1.")
        return cleaned_data</code>
ログイン後にコピー

メソッドをオーバーライドすることで、フォーム全体に適用されるカスタム検証ロジックを実装して、データがより複雑な要件を満たしていることを確認できます。 clean()

概要

Django は、さまざまなフォーム検証メソッドを提供します。

  • フィールドパラメータ: 簡単な検証には、max_lengthmin_value などのパラメータを使用します。
  • 組み込みバリデーター: Django の事前定義されたバリデーターを使用して、一般的なパターンを処理します。
  • カスタムバリデータ: 複雑な検証ルール用に再利用可能な呼び出し可能なオブジェクトを作成します。
  • clean_<fieldname>() メソッド: 高度なフィールド固有の検証のためにこのメソッドをオーバーライドします。
  • clean()メソッド: このメソッドは、複数のフィールドを含むフォームレベルの検証に使用します。

以上がDjangoのフィールド検証の技術の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート