Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 1.8 EmailField现在接受无效的电子邮件地址_Python_Django_Django Models - Fatal编程技术网

Python Django 1.8 EmailField现在接受无效的电子邮件地址

Python Django 1.8 EmailField现在接受无效的电子邮件地址,python,django,django-models,Python,Django,Django Models,使用Django 1.8模型EmailField就像这样 email = models.EmailField(verbose_name='email address', max_length=254, unique=True, db_index=True) …允许输入无效电子邮件。例如,以下内容将在出现错误时创建有效用户 用户(电子邮件号码_six@caprica,password=“xyz”) 但是,如果我在Django中测试验证器,它会正确地捕获它 从django.core.validat

使用Django 1.8模型
EmailField
就像这样

email = models.EmailField(verbose_name='email address', max_length=254, unique=True, db_index=True)
…允许输入无效电子邮件。例如,以下内容将在出现错误时创建有效用户

用户(电子邮件号码_six@caprica,password=“xyz”)

但是,如果我在Django中测试验证器,它会正确地捕获它

从django.core.validators导入validate\u电子邮件 验证电子邮件(“数字_six@caprica))

我得到正确的
输入有效的电子邮件地址。
响应一次


怎么回事?
EmailField
validate\u email
是否使用相同的正则表达式?为什么
EmailField
接受无效的电子邮件地址而
validate\u email
不接受

这些不是无效的电子邮件地址,浏览器也接受电子邮件类型的输入

me@localhost
例如,是一个有效的电子邮件地址

本地域名不需要注册,这就是为什么

编辑:虽然这些是有效的电子邮件地址,但Django不接受它们
EmailField
确实使用了
validate\u电子邮件
validator


您的问题是模型实例验证必须手动运行,例如使用
full\u clean
方法。有关更多信息,请参阅。

那么,为什么EmailField接受无效的电子邮件地址而validate_email不接受?@OrbiterFleet它不接受。实例化对象时不会运行验证程序。然后需要手动运行。clean方法是否不会自动在.save()中调用?@OrbiterFleet否,但在使用
ModelForm.save
时确实会调用它。我不确定我是否完全理解为什么save()和.save如此不同,但这似乎有效。EmailField确实使用validate\u email方法。当您试图保存对象时,可能会调用它?@IonutHulub上面的测试直接在Shell中进行,其中EmailField允许它,而validate_email不允许。对我来说,这里发生了一些奇怪的事情。当您将对象保存到数据库时,可能会调用验证程序。请尝试
email.save()
,看看这是否会引发验证错误。@IonutHulub Nope已尝试
User(email=“number_six@capricaa,password=“xyz”).save()
,它仍然保存到数据库中:(