【问题标题】:Django(1.3.1) email validation is failing for valid email address like "xxx@xxx.education"Django(1.3.1)电子邮件验证失败,如“xxx@xxx.education”等有效电子邮件地址
【发布时间】:2015-12-19 10:23:03
【问题描述】:

最近出现了一个要求,即客户在注册用户时遇到问题。

在填写注册表时,有一个字段可以填写电子邮件地址。

这里的用户有“xyz@abc.education”之类的电子邮件地址......在输入其他详细信息并提交表单后,它失败并显示“请输入一个有效的电子邮件地址”。

电子邮件地址完全有效,但 django 不允许它继续。

可能的解决方案:

  • 去更新字段以存储 Charfield 而不是 EmailField。但在我的情况下是不可能的。

  • 在 django/code/validator.py ..i 中可以去修改正则表达式检查以允许超过 6 个字符(目前支持 {2,6})。但这不是更改库代码的好主意。

请提出建议。

【问题讨论】:

  • Django 已经支持像 'xyz@abc.education' 这样的域有一段时间了(我相信是 1.5)。
  • 抱歉忘了提...应用是在 django 1.3.1 上构建的

标签: python django validation email


【解决方案1】:

我会扩展默认的 EmailField 并更改验证器。像这样的东西可能有效(未经测试):

my_validate_email = django.core.validators.EmailValidator(whitelist=['abc.education'])

class MyEmailField(EmailField): 
    default_validators = [my_validate_email]

相关源码为EmailFieldEmailValidator

【讨论】:

  • 感谢@Tiago 的回复...我会尝试更新您。
  • 我认为我们不能将参数(白名单)传递给 django 1.3.1 中的 EmailValidator() ..only 期望正则表达式验证器 ..class EmailValidator(RegexValidator): def __call__(self, value): try: super(EmailValidator, self).__call__(value) 除了 ValidationError, e: .....
  • 然后您必须复制/粘贴当前的 email_re 并对其进行更改以使其适用于您的设置(您可以查找较新的 django 版本并从那里复制)。然后,您可以创建一个新的 my_validade_email。看到这条线github.com/django/django/blob/stable/1.3.x/django/core/…
  • 当然我会试一试并回复你
猜你喜欢
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2014-06-12
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
  • 2012-04-08
相关资源
最近更新 更多