如何使用 django 显示无效电子邮件地址的错误消息
How to display error message for invalid email address using django
我在用户输入时显示错误消息时遇到问题
无效的邮件地址。
这是我的 forms.py 文件:
from django import forms
from .models import Contact
from django.db import models
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = [
'name',
'email',
'message',
]
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.fields['name'].widget = forms.TextInput(attrs={
'placeholder': 'Name',
'required': True})
self.fields['email'].widget = forms.TextInput(attrs={
'placeholder': 'Email',
'required': True})
self.fields['message'].widget = forms.Textarea(attrs={
'placeholder': 'Message',
'rows': 6,
'required': True})
这是我的 models.py 文件
from django.db import models
from django import forms
from django.core.validators import EmailValidator
# Create your models here.
class Contact(models.Model):
name = models.CharField(max_length = 50)
email = models.EmailField(blank = False, max_length = 200)
message = models.TextField(blank = False)
这是我的 views.py 文件:
from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponseRedirect
from .models import Contact
from .forms import ContactForm
from django.contrib import messages
# Create your views here.
def contact_create(request):
form = ContactForm(request.POST or None)
if form.is_valid():
instance = form.save(commit = False)
instance.save()
form = ContactForm()
messages.success(request, 'Your message was sent successfully. We will contact you shortly.')
return HttpResponseRedirect('/home/#contact')
context = {
"form": form,
}
return render(request, 'index.html', context)
最后我的表格在 index.html 文件
{% include "messages_display.html" %}
<form method="POST" action="">
{% csrf_token %}
<div class="row half">
<div class = "6u" > {{ form.name }} </div>
<div class = "6u" > {{ form.email }} </div>
</div>
<div class="row half">
<div class="12u"> {{ form.message }} </div>
</div>
<div class="row">
<div class="12u">
<ul class="actions">
<input type="submit" class="button" value="Send Message" />
</ul>
</div>
</div>
</form>
所以,message.success 显示正常,没问题,我想,如果用户输入无效的电子邮件地址,在电子邮件字段下显示错误消息,就像名称字段或消息时一样字段留空,显示 "Please fill out this field"。
感谢您的帮助。
当名称或消息字段为空时,您的表单不会显示错误,原因与它不显示无效电子邮件错误的原因相同:因为您没有输入模板中的任何内容来显示这些错误。您需要添加 {{ form.email.errors }}
等才能做到这一点。
要显示邮件字段的错误消息,您表单的电子邮件字段应为 forms.EmailInput
因此,您的 forms.py 文件应该是:
from django import forms
from .models import Contact
from django.db import models
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = [
'name',
'email',
'message',
]
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.fields['name'].widget = forms.TextInput(attrs={
'placeholder': 'Name',
'required': True})
self.fields['email'].widget = forms.EmailInput(attrs={
'placeholder': 'Email',
'required': True})
self.fields['message'].widget = forms.Textarea(attrs={
'placeholder': 'Message',
'rows': 6,
'required': True})
我在用户输入时显示错误消息时遇到问题 无效的邮件地址。
这是我的 forms.py 文件:
from django import forms
from .models import Contact
from django.db import models
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = [
'name',
'email',
'message',
]
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.fields['name'].widget = forms.TextInput(attrs={
'placeholder': 'Name',
'required': True})
self.fields['email'].widget = forms.TextInput(attrs={
'placeholder': 'Email',
'required': True})
self.fields['message'].widget = forms.Textarea(attrs={
'placeholder': 'Message',
'rows': 6,
'required': True})
这是我的 models.py 文件
from django.db import models
from django import forms
from django.core.validators import EmailValidator
# Create your models here.
class Contact(models.Model):
name = models.CharField(max_length = 50)
email = models.EmailField(blank = False, max_length = 200)
message = models.TextField(blank = False)
这是我的 views.py 文件:
from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponseRedirect
from .models import Contact
from .forms import ContactForm
from django.contrib import messages
# Create your views here.
def contact_create(request):
form = ContactForm(request.POST or None)
if form.is_valid():
instance = form.save(commit = False)
instance.save()
form = ContactForm()
messages.success(request, 'Your message was sent successfully. We will contact you shortly.')
return HttpResponseRedirect('/home/#contact')
context = {
"form": form,
}
return render(request, 'index.html', context)
最后我的表格在 index.html 文件
{% include "messages_display.html" %}
<form method="POST" action="">
{% csrf_token %}
<div class="row half">
<div class = "6u" > {{ form.name }} </div>
<div class = "6u" > {{ form.email }} </div>
</div>
<div class="row half">
<div class="12u"> {{ form.message }} </div>
</div>
<div class="row">
<div class="12u">
<ul class="actions">
<input type="submit" class="button" value="Send Message" />
</ul>
</div>
</div>
</form>
所以,message.success 显示正常,没问题,我想,如果用户输入无效的电子邮件地址,在电子邮件字段下显示错误消息,就像名称字段或消息时一样字段留空,显示 "Please fill out this field"。
感谢您的帮助。
当名称或消息字段为空时,您的表单不会显示错误,原因与它不显示无效电子邮件错误的原因相同:因为您没有输入模板中的任何内容来显示这些错误。您需要添加 {{ form.email.errors }}
等才能做到这一点。
要显示邮件字段的错误消息,您表单的电子邮件字段应为 forms.EmailInput
因此,您的 forms.py 文件应该是:
from django import forms
from .models import Contact
from django.db import models
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = [
'name',
'email',
'message',
]
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.fields['name'].widget = forms.TextInput(attrs={
'placeholder': 'Name',
'required': True})
self.fields['email'].widget = forms.EmailInput(attrs={
'placeholder': 'Email',
'required': True})
self.fields['message'].widget = forms.Textarea(attrs={
'placeholder': 'Message',
'rows': 6,
'required': True})