Django EmailField接受任何值(包括空白)

时间:2014-11-16 12:50:37

标签: python django emailfield

拥有这个Django模型:

class Subscriber(models.Model):
    email = models.EmailField(unique=True, blank=False)

创建包含空电子邮件的订阅者时,我不会遇到任何例外情况:

>>> Subscriber.objects.create(email='')
<Subscriber: Subscriber object>

有趣的是,它第二次会引发IntegrityError:

>>> Subscriber.objects.create(email='')
...
IntegrityError: column email is not unique

所以它似乎验证了完整性,但对于电子邮件格式和空白条目都没有。如何验证电子邮件?

2 个答案:

答案 0 :(得分:5)

参数blank用于表单,不在数据库级别强制执行

来自documentation

  

Field.blank如果为True,则允许该字段为空。默认是   假

     

请注意,这与null不同。 null纯粹   与数据库相关,而空白与验证相关。如果有一个字段   blank = True,表单验证将允许输入空值。如果一个   field为blank = False,将需要该字段。

确实validator documentation

  

请注意,保存模型时不会自动运行验证程序

强制您必须使用full_clean()方法。

抛出错误是因为您尝试插入两次空字符串并且已经插入 对该领域的独特约束。

答案 1 :(得分:0)

您需要使用内置的电子邮件验证程序验证您的电子邮件字段

from django.core.validators import validate_email

以这种方式声明您的电子邮件字段

email = models.EmailField(unique=True, validators=[validate_email,])

这样它将使用内置的正则表达式验证您的电子邮件字段