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.
回复。
这是怎么回事? EmailField
和 validate_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。
像这样使用 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.
回复。
这是怎么回事? EmailField
和 validate_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。