Django EmailValidator проверяет конечные точки - PullRequest
0 голосов
/ 29 января 2019

Я использую Django 1.9, и EmailValidator, кажется, проверяет конечные точки в идентификаторах электронной почты.

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.']

Кто-нибудь знает, в чем проблема?

1 Ответ

0 голосов
/ 29 января 2019

Когда вы save() модель, вы только говорите Django о фиксации объекта в базе данных.Он не проверяется во время сохранения.Он будет выдавать исключения из базы данных, если поля не имеют ожидаемый форматом базы данных, но EmailField - это просто поле char в вашей БД.Вы должны всегда проверять свои модели перед их сохранением:

user.email = faulty_email
try:
    user.full_clean()
except ValidationError as e:
    print(e)
else:
    user.save()

При использовании ModelForm вы сначала проверяете форму (отметьте form.is_valid()), а затем сохраняете ее.

...