【问题标题】:How to display error message for invalid email address using django如何使用 django 显示无效电子邮件地址的错误消息
【发布时间】:2016-06-27 22:21:55
【问题描述】:

我在用户输入时显示错误消息时遇到问题 无效的邮件地址。

这是我的 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 显示正常,没有问题,我想,如果用户输入无效的电子邮件地址,在电子邮件字段下显示错误消息,就像 name 字段或 message 字段留空一样,它显示“请填写此字段”。

谢谢你的帮助。

【问题讨论】:

    标签: python django forms email emailfield


    【解决方案1】:

    当名称或消息字段为空时,您的表单不会显示错误,原因与它不显示无效电子邮件错误的原因相同:因为您没有在模板中放入任何内容显示这些错误。您需要添加{{ form.email.errors }} 等才能这样做。

    【讨论】:

    • 你的回答也有效,但不是我想要的,谢谢
    【解决方案2】:

    要显示邮件字段的错误消息,表单的电子邮件字段应为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})
    

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 2019-10-01
      • 2021-04-20
      • 2014-07-14
      • 2019-01-25
      • 2018-05-18
      相关资源
      最近更新 更多