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

Django 1.8 EmailField now accepts invalid email addresses

像这样使用 Django 1.8 模型 EmailField...

email = models.EmailField(verbose_name='email address', max_length=254, unique=True, db_index=True)

...允许输入无效的电子邮件。例如,以下创建一个有效的用户应该错误...

User(email="number_six@caprica", password="xyz")

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

from django.core.validators import validate_email validate_email("number_six@caprica")

我得到了正确的 Enter a valid email address. 回复。

这是怎么回事? EmailFieldvalidate_email 不使用相同的正则表达式吗?为什么 EmailField 接受无效的电子邮件地址,而 validate_email 不接受?

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

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

本地域名不需要 TLD,这就是原因。

编辑: 尽管这些是有效的电子邮件地址,但 Django 不接受它们。 EmailField 确实使用了 validate_email 验证器。

您的问题是模型实例验证必须 运行 手动进行,例如使用 full_clean 方法。有关详细信息,请参阅 https://docs.djangoproject.com/en/1.8/ref/models/instances/#validating-objects