Die Django-Formulardatenvalidierung ist ein wichtiges Glied in der Webentwicklung und stellt sicher, dass die gesammelten Benutzerdaten den Anwendungsanforderungen entsprechen. Django bietet eine Vielzahl von Feldvalidierungsmethoden, die in diesem Artikel Schritt für Schritt erläutert werden.
Beim Definieren von Django-Formularfeldern können Sie Validierungsregeln normalerweise direkt über Feldparameter angeben.
Stellen Sie beispielsweise sicher, dass das Feld first_name
eine maximale Länge von 100 Zeichen hat. Da es sich um CharField
handelt, können Sie den Parameter max_length
verwenden:
<code class="language-python">from django import forms class PersonalInfo(forms.Form): first_name = forms.CharField(max_length=100)</code>
Dies ist eine der einfachsten und am häufigsten verwendeten Verifizierungsmethoden.
Djangos integrierte Validatoren sind wiederverwendbare aufrufbare Objekte, die spezifische Validierungsprüfungen durchführen.
Angenommen, Sie möchten sicherstellen, dass der Mindestwert des Felds age
18 beträgt. Während es möglich ist, den Parameter min_value
direkt zu verwenden, finden Sie hier eine Demonstration, wie Sie Djangos MinValueValidator
verwenden:
<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>
Das validators
-Modul von Django bietet mehrere vorgefertigte Validatoren für Aufgaben wie die Überprüfung von Min-/Max-Werten, die Validierung regulärer Ausdrücke und mehr.
Manchmal ist eine komplexere Validierungslogik erforderlich, die die integrierten Validatoren nicht verarbeiten können. In diesem Fall ist es möglich, einen benutzerdefinierten Validator zu schreiben.
Ein Validator ist ein aufrufbares Objekt, das einen Wert empfängt und ValidationError
auslöst, wenn der Wert die Kriterien nicht erfüllt. Erstellen Sie beispielsweise einen Validator, um sicherzustellen, dass eine Zahl gerade ist:
<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>
Tipp: Um Ihren Code organisiert zu halten, sollten Sie Ihre benutzerdefinierten Validatoren in einer separaten Datei platzieren, z. B. validators.py
. Das hängt von der Größe des Projekts ab.
clean_<fieldname>()
-MethodeEine weitere leistungsstarke Methode zur Feldvalidierung besteht darin, die Methode clean_<fieldname>()
in der Formularklasse zu überschreiben. Diese Methode ist besonders nützlich für Validierungslogik, die sich speziell auf ein einzelnes Formular bezieht.
Zum Beispiel, um das Feld even_field
direkt im Formular zu validieren:
<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>
Diese Methode bietet direkten Zugriff auf die bereinigten Daten des Feldes und ermöglicht eine genauere Kontrolle der Validierung.
clean()
MethodeManchmal müssen bei der Validierung Beziehungen zwischen mehreren Feldern in einem Formular berücksichtigt werden. Angenommen, Sie haben zwei Felder und müssen sicherstellen, dass ein Feld mehr Zeichen enthält als das andere. Bei dieser Art der Validierung handelt es sich um eine Validierung auf Formularebene, da sie von den Werten mehrerer Felder und nicht nur eines einzelnen Felds abhängt.
Dazu können Sie die Methode clean()
in der Formularklasse überschreiben.
<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>
Durch Überschreiben der clean()
-Methode können Sie eine benutzerdefinierte Validierungslogik implementieren, die für das gesamte Formular gilt, um sicherzustellen, dass die Daten komplexere Anforderungen erfüllen.
Django bietet eine Vielzahl von Formularvalidierungsmethoden:
max_length
oder min_value
und andere Parameter zur einfachen Überprüfung. clean_<fieldname>()
clean()
Das obige ist der detaillierte Inhalt vonTechniken zur Feldvalidierung in Django. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!