Django フォーム データの検証は、Web 開発における重要なリンクであり、収集されたユーザー データがアプリケーションの要件を満たしていることを確認します。 Django にはさまざまなフィールド検証メソッドが用意されており、この記事ではそれについて順を追って説明します。
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 つです。
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>
モジュールは、最小値/最大値のチェック、正規表現の検証などのタスク用に、事前に構築された複数のバリデーターを提供します。 validators
バリデーターは、値を受け取り、値が基準を満たさない場合に
を発生させる呼び出し可能なオブジェクトです。たとえば、数値が偶数であることを確認するバリデータを作成します。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
clean_<fieldname>()
メソッドをオーバーライドすることです。このメソッドは、単一のフォームに固有の検証ロジックに特に役立ちます。 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>
clean()
フォームレベルの検証と呼ばれます。
これを行うには、フォーム クラスの メソッドをオーバーライドします。 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()
max_length
や min_value
などのパラメータを使用します。 clean_<fieldname>()
メソッド: 高度なフィールド固有の検証のためにこのメソッドをオーバーライドします。 clean()
メソッド: このメソッドは、複数のフィールドを含むフォームレベルの検証に使用します。 以上がDjangoのフィールド検証の技術の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。