Python Django-调用.super().clean()后未列出电子邮件字段

Python Django-调用.super().clean()后未列出电子邮件字段,python,django,validation,email-validation,Python,Django,Validation,Email Validation,我是Django的新手,如果这是一个基本问题(或错误),我深表歉意,但当我键入电子邮件时,我遇到了电子邮件格式验证方面的问题,如:test@com 我为测试创建了下面的form.py和views.py: form.py from django import forms from django.core import validators class userForm(forms.Form): fname = forms.CharField(label="First name")

我是Django的新手,如果这是一个基本问题(或错误),我深表歉意,但当我键入电子邮件时,我遇到了电子邮件格式验证方面的问题,如:test@com

我为测试创建了下面的form.py和views.py:

form.py

from django import forms
from django.core import validators

class userForm(forms.Form):
    fname = forms.CharField(label="First name")
    lname = forms.CharField(label="Last name")
    email = forms.EmailField(label="Email")
    vemail = forms.EmailField(label="Email validation")


    def clean(self):
        all_clean_data = super().clean()
        fname = all_clean_data['fname'].lower().capitalize()
        lname = all_clean_data['lname'].lower().capitalize()
        email = all_clean_data['email'].lower()
        vmail = all_clean_data['vemail'].lower()
        if email != vmail:
            raise forms.ValidationError("Email address doesn't match, please try again")
def users(request):
    form = forms.userForm()
    if request.method == 'POST':
        form = forms.userForm(request.POST)
        if form.is_valid():
            print('Validation ok')
    return render(request,"test_app/users.html",{'formName':form})
视图.py

from django import forms
from django.core import validators

class userForm(forms.Form):
    fname = forms.CharField(label="First name")
    lname = forms.CharField(label="Last name")
    email = forms.EmailField(label="Email")
    vemail = forms.EmailField(label="Email validation")


    def clean(self):
        all_clean_data = super().clean()
        fname = all_clean_data['fname'].lower().capitalize()
        lname = all_clean_data['lname'].lower().capitalize()
        email = all_clean_data['email'].lower()
        vmail = all_clean_data['vemail'].lower()
        if email != vmail:
            raise forms.ValidationError("Email address doesn't match, please try again")
def users(request):
    form = forms.userForm()
    if request.method == 'POST':
        form = forms.userForm(request.POST)
        if form.is_valid():
            print('Validation ok')
    return render(request,"test_app/users.html",{'formName':form})
看来一切都很好。。。但是如果在表格(网页)中键入电子邮件地址,如:test@com然后提交表单,会发生两件事:

  • 我在表单上没有收到类似“无效电子邮件格式”的警告 (网页)
  • 所有_clean_数据['email']上的电子邮件“key”不存在 存在
  • 如果我键入以下有效电子邮件:test@test.com,它起作用了。 如果我键入一个无效的电子邮件地址,如:abcde,则会收到一条警告消息

    问题是当我键入如下内容时:test@com。。。然后我没有得到任何验证错误消息,提交被触发,但我也没有得到字段

    谢谢你的帮助

    调试信息下方的

    KeyError at /
    'email'
    Request Method:     POST
    Request URL:    http://127.0.0.1:8000/
    Django Version:     3.0.3
    Exception Type:     KeyError
    Exception Value:    
    'email'
    Exception Location:     /Users/.../test_app/forms.py in clean, line 20
    Python Executable:  /Users/.../bin/python
    Python Version:     3.8.2
    Python Path:    
    ['/Users/.../test_project/test_project',
     '/Users/.../opt/anaconda3/envs/myDjangoEnv/lib/python38.zip',
     '/Users/.../opt/anaconda3/envs/myDjangoEnv/lib/python3.8',
     '/Users/.../opt/anaconda3/envs/myDjangoEnv/lib/python3.8/lib-dynload',
     '/Users/.../opt/anaconda3/envs/myDjangoEnv/lib/python3.8/site-packages']