Django EmailField akzeptiert ungültige Werte

9

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.

    
Staccato 21.08.2013, 21:42
quelle

3 Antworten

13

Tatsächlich ist [email protected] email eine gültige Email für django EmailValidator , siehe keine Fehler:

%Vor%

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:

%Vor%

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.

    
alecxe 21.08.2013, 22:15
quelle
4

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 .

    
Adrián 21.08.2013 22:15
quelle
0

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.

Model.clean_fields

  

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.

Model.full_clean

  

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.

%Vor%     
dm295 05.12.2017 13:33
quelle

Tags und Links