Django EmailValidator 验证尾随点
Django EmailValidator validating trailing dots
我使用的是 Django 1.9,EmailValidator
似乎在验证电子邮件 ID 中的尾随点。
faulty_email = 'sid@h.in.'
user.email = faulty_email
user.save()
上面的代码 运行 即使 email
是一个 EmailField
也很顺利,它有 EmailValidator
。奇怪的是,当我 运行 手动验证时,它会抛出 ValidationError
.
In [1]: from django.core.validators import validate_email
In [2]: faulty_email = 'sid@h.in.'
In [3]: validate_email(faulty_email)
---------------------------------------------------------------------------
ValidationError Traceback (most recent call last)
<ipython-input-3-bdbbd57d5fe1> in <module>()
----> 1 validate_email(faulty_email)
/usr/local/lib/python2.7/dist-packages/django/core/validators.pyc in __call__(self, value)
201 except UnicodeError:
202 pass
--> 203 raise ValidationError(self.message, code=self.code)
204
205 def validate_domain_part(self, domain_part):
ValidationError: [u'Enter a valid email address.']
有人知道问题出在哪里吗?
当你 save()
一个模型时,你只是告诉 Django 将对象提交到数据库。它在保存期间不验证。如果字段没有数据库预期的格式,但 EmailField
只是数据库中的一个字符字段,它将抛出数据库异常。在保存它们之前你应该总是 validate your models:
user.email = faulty_email
try:
user.full_clean()
except ValidationError as e:
print(e)
else:
user.save()
使用 ModelForm
时,您首先要验证表单(选中 form.is_valid()
)然后保存。
我使用的是 Django 1.9,EmailValidator
似乎在验证电子邮件 ID 中的尾随点。
faulty_email = 'sid@h.in.'
user.email = faulty_email
user.save()
上面的代码 运行 即使 email
是一个 EmailField
也很顺利,它有 EmailValidator
。奇怪的是,当我 运行 手动验证时,它会抛出 ValidationError
.
In [1]: from django.core.validators import validate_email
In [2]: faulty_email = 'sid@h.in.'
In [3]: validate_email(faulty_email)
---------------------------------------------------------------------------
ValidationError Traceback (most recent call last)
<ipython-input-3-bdbbd57d5fe1> in <module>()
----> 1 validate_email(faulty_email)
/usr/local/lib/python2.7/dist-packages/django/core/validators.pyc in __call__(self, value)
201 except UnicodeError:
202 pass
--> 203 raise ValidationError(self.message, code=self.code)
204
205 def validate_domain_part(self, domain_part):
ValidationError: [u'Enter a valid email address.']
有人知道问题出在哪里吗?
当你 save()
一个模型时,你只是告诉 Django 将对象提交到数据库。它在保存期间不验证。如果字段没有数据库预期的格式,但 EmailField
只是数据库中的一个字符字段,它将抛出数据库异常。在保存它们之前你应该总是 validate your models:
user.email = faulty_email
try:
user.full_clean()
except ValidationError as e:
print(e)
else:
user.save()
使用 ModelForm
时,您首先要验证表单(选中 form.is_valid()
)然后保存。