python - Django - 调用 .super().clean() 后未列出电子邮件字段
问题描述
我是 Django 新手,如果这是基本问题(或错误),我深表歉意,但是当电子邮件输入如下:test@com时,我遇到了电子邮件格式验证问题。
我在下面创建了 form.py 和 views.py 进行测试:
表格.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")
视图.py
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并提交表单,会发生两件事:
- 我没有在表单(网页)上收到类似“无效的电子邮件格式”的警报
- all_clean_data['email'] 上的电子邮件“密钥”不存在。
如果我输入一个有效的电子邮件,例如: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']
解决方案
推荐阅读
- javascript - React - 如何使用 handleInputChange 函数来更改状态值内的状态值?
- javascript - html嵌套折叠没有引导,jquery
- java - 在 Spring Boot 中处理异常的方法。抛出异常捕获并抛出相同的异常,这是一种不好的做法吗?
- c# - 重复使用 AutoResetEvent
- android - 我无法在 IOS 上保存图像,但在 Android (Flutter) 上运行良好
- node.js - Express:从 React 前端发送 POST 请求以空正文发送,但从 Postman 发送正确发送正文
- python - Python - 在绘图中使用高度和标签变量的问题
- bi-publisher - BI Publisher:将所有列添加到表格报告
- excel - 如果 C 列中的值等于或超过金额,则突出显示 A 列中的名称
- json - 使用正则表达式清理 JSON 字符串