Python Django 1.8 EmailField现在接受无效的电子邮件地址
使用Django 1.8模型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
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()
,它仍然保存到数据库中:(