Ich erstelle ein Kontaktformular (daher kein modellbasiertes Formular) und bin nach dem Hinzufügen eines Regex-Validators zu meinem E-Mail-Feld auf folgendes Problem gestoßen: Die benutzerdefinierte Fehlermeldung, die ich hinzugefügt habe, wird jetzt zweimal angezeigt. Das passiert, wenn ich eine E-Mail wie "etwas" eintrage (sie stimmt nicht mit meiner Regex überein oder hat das Standardzeichen "@" - wenn ich das '@' Symbol anschließe, erscheint nur eine Nachricht).Django - Formularfehlermeldung, die bei Verwendung von Validatoren zweimal angezeigt wird
Ich bin mir nicht sicher, aber ich denke, Djangos Standardvalidierung + meine benutzerdefinierte Validierung sind dafür verantwortlich, also frage ich mich (wenn das das Problem ist), was ich tun kann, um die gleiche Nachricht zu verhindern zweimal hoch.
Vielen Dank im Voraus!
forms.py:
from django import forms
from django.core.validators import RegexValidator
class ContactForm(forms.Form):
full_name = forms.CharField(required=True)
email = forms.EmailField(validators=[RegexValidator(regex=r'^\[email protected]([[email protected]_]+)(\.[[email protected]_]+)+\b')]
, error_messages={'invalid': 'This is my email error msg.'})
message = forms.CharField(widget=forms.Textarea)
Das ‚Das ist mein E-Mail-Fehler msg ist‘ die man immer wieder zeigt sich »zum Beispiel: * Das ist meine E-Mail-Fehler msg * Dies ist meine E-Mail-Fehler msg
views.py:
def contact(request):
form = ContactForm(request.POST or None)
context = {"form":form}
if form.is_valid():
form_name = form.cleaned_data.get("full_name")
form_email = form.cleaned_data.get("email")
form_message = form.cleaned_data.get("message")
subject = "Message from %s (%s)" % (form_name, form_email)
from_email = form_email
to_email = ['myemail',]
contact_message = form_message
send_mail(subject, contact_message, from_email, to_email, fail_silently=False)
context = {"form":form,"thanks_msg": "Thank you!"}
return render(request, 'contact.html', context)
Vorlage:
<form action="" method="POST" class="form"> {% csrf_token %}
{% for field in form %}
<div class="fields-container">
<label class="label">{{ field.label }}</label>
{{ field }}
</div>
<p class="server-form-errors"> {{ field.errors.as_text }} </p>
{% endfor %}
<button type="submit" id="form-button">Submit</button>
</form>
Mögliches Duplikat von [E-Mail in django/Python Prüfung der Gültigkeit] (http://stackoverflow.com/questions/3217682/checking-validity-of-email-in-django-python) – Sayse
Warum nicht verwenden der eingebaute [EmailValidator] (https://docs.djangoproject.com/en/1.9/ref/validators/#emailvalidator)? – Sayse
Ich schaue mir das Thema an, das du gepostet hast, aber ich finde keine Erwähnungen über wiederholte Validierungsnachrichten, nur verschiedene Validierungsmethoden: S Ich werde mir die Unterschiede zwischen regexvalidator und emailvalidator ansehen, aber ich denke das Problem wird immer noch da sein, weil ich diese doppelte Fehlermeldung bekomme, wenn meine Regex-Validierung fehlschlägt (das heißt, es gibt keine Übereinstimmung) und wenn ich das '@' Symbol nicht hinzufüge, so glaube ich, dass es zwei Validierungen gibt, aber nur ich möchte eine Nachricht, wenn dies passiert. – Acla