【发布时间】:2016-03-23 01:16:39
【问题描述】:
我正在创建一个联系表单(因此不使用基于模型的表单),在向我的电子邮件字段添加正则表达式验证器后,我遇到了以下问题:我添加的自定义错误消息现在是显示两次。 当我输入诸如“某事”之类的电子邮件时会发生这种情况(它与我的正则表达式不匹配,也没有默认的“@”符号 - 如果我添加了“@”符号,则只会显示一条消息)。
我不确定,但我猜 django 的默认验证 + 我的自定义验证对此负责,所以我想知道(如果这是问题所在),我能做些什么来防止出现相同的消息两次。
提前谢谢你!
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'^\d+@([a-zA-Z0-9@-_]+)(\.[a-zA-Z0-9@-_]+)+\b')]
, error_messages={'invalid': 'This is my email error msg.'})
message = forms.CharField(widget=forms.Textarea)
“这是我的电子邮件错误消息”是重复出现的那个 » 例如:* 这是我的电子邮件错误消息 * 这是我的电子邮件错误消息
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)
模板:
<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>
【问题讨论】:
-
为什么不使用内置的EmailValidator?
-
我正在查看您发布的主题,但我找不到有关重复验证消息的提及,只有不同的验证方法:S 我要看看 regexvalidator 和 emailvalidator 之间的区别,但我认为问题仍然存在,因为当我的正则表达式验证失败(即不匹配)并且我不添加“@”符号时,我会收到此双重错误消息,所以我相信有两个验证开始,但发生这种情况时我只想要一条消息。
标签: django python-2.7