Ich verwende derzeit das Standardattribut EmailField
in meinem Formular. Das Problem ist, dass das Formular eine ungültige E-Mail wie [email protected]
als gültig ansieht. Muss ich mein eigenes validators
in diesem Feld implementieren, damit es korrekt funktioniert?
Ich hatte den Eindruck, dass ich Folgendes habe:
%Vor%Oder mit:
%Vor%wird diese Art der Validierung für mich übernehmen, aber es scheint nicht so.
Tatsächlich ist [email protected]
email eine gültige Email für django EmailValidator
, siehe keine Fehler:
Django (1.5.1) verwendet den folgenden regulären Ausdruck für die Validierung der E-Mail-Adresse:
%Vor%Und es folgt tatsächlich RFC2822 Standard.
Wenn [email protected]
während der Validierung fehlschlagen soll, können Sie Ihren eigenen Validator erstellen und ihn zu EmailField
validators mit integriertem% co_de% validator hinzufügen, wie folgt:
Und, zu Ihrer Information, Sie können immer ein Ticket im Django-Ticket-System einreichen oder nach dem Problem auf dem IRC-Kanal von Django fragen (irc: //irc.freenode.net/django).
Siehe auch: Validierer schreiben .
Ich hoffe, das hilft.
Sie können die verwendete Regex hier sehen.
Ich denke, es wird nicht 100% der falschen E-Mails verwerfen. Deshalb heißt es in den Dokumenten :
Validiert, dass der angegebene Wert eine gültige E-Mail-Adresse ist, mit a mäßig komplexer regulärer Ausdruck.
Was ich daraus verstehe, ist, dass es aufgrund einer Designentscheidung keine perfekte Validierung durchführt (es wäre ein Performance-Kompromiss).
Schließlich bin ich mir ziemlich sicher, dass Ihr Beispiel [email protected]
eine gültige E-Mail ist . Der Domain-Teil einer E-Mail-Adresse kann eine IP (sowohl IPv4 als auch IPv6) oder ein Hostname sein. Weitere Informationen zum Thema finden Sie hier .
Für die Validierung nur auf DB-Ebene müssen Sie full_clean
manuell aufrufen.
Drei wichtige Zitate aus der Dokumentation:
Wie werden Validatoren ausgeführt
Weitere Informationen zur Ausführung von Validatoren finden Sie in der Formularüberprüfung in Formularen und Validieren von Objekten, wie sie in Modellen ausgeführt werden. Hinweis Diese Validatoren werden beim Speichern eines Modells nicht automatisch ausgeführt. Wenn Sie jedoch eine ModelForm verwenden, werden Ihre Validatoren auf allen ausgeführt Felder, die in Ihrem Formular enthalten sind. Siehe die ModelForm-Dokumentation Informationen darüber, wie die Modellvalidierung mit Formularen interagiert.
Der zweite Schritt full_clean () führt zum Aufruf von Model.clean (). Dies Methode sollte außer Kraft gesetzt werden, um eine benutzerdefinierte Überprüfung auf Ihrem System durchzuführen Modell.
%Vor%Beachten Sie, dass full_clean () nicht automatisch aufgerufen wird, wenn Sie anrufen Die save () -Methode Ihres Modells. Sie müssen es manuell aufrufen, wenn Sie möchte eine einstufige Modellvalidierung für Ihr eigenes manuell erstellt ausführen Modelle.
Tags und Links django django-forms