像这样使用Django 1.8模型EmailField
......
email = models.EmailField(verbose_name='email address', max_length=254, unique=True, db_index=True)
...允许输入无效的电子邮件。例如,以下内容会在错误...
时创建有效用户用户(email =“number_six @ caprica”,密码=“xyz”)
但是,如果我在Django中测试验证器,它会正确捕获它......
来自django.core.validators import validate_email validate_email( “number_six @卡布里卡”)
我得到了正确的Enter a valid email address.
回复。
最近怎么回事? EmailField
和validate_email
不使用相同的正则表达式吗?为什么EmailField
接受validate_email
没有的无效电子邮件地址?
答案 0 :(得分:2)
这些不是无效的电子邮件地址,浏览器也会在电子邮件类型的输入中接受这些地址。
me@localhost
例如是有效的电子邮件地址。
本地域名不需要TLD,这就是原因。
编辑:虽然这些是有效的电子邮件地址,但Django不接受它们。 EmailField
确实使用validate_email
验证程序。
您的问题是必须使用full_clean
方法手动运行模型实例验证。有关详细信息,请参阅https://docs.djangoproject.com/en/1.8/ref/models/instances/#validating-objects。