【问题标题】:Emailing to new top-level domains (TLDs) in django在 django 中向新的顶级域 (TLD) 发送电子邮件
【发布时间】:2015-07-03 12:16:30
【问题描述】:

我需要支持像 joe@netherworld.enterprises(新批准的 TLD 之一)这样的电子邮件地址。我的django版本是1.4.5,python是2.7

我的模型如下所示:

class Invitation(models.Model):
    email = models.EmailField(max_length=60, blank=False)

问题是验证器“EmailField”拒绝“企业”,我认为是因为它太长了,并且不以 .com 或类似名称结尾。 (.enterprises 现在是有效的顶级域。)

如何告诉验证器接受该域? (最好是其他人喜欢它。)

谢谢!

【问题讨论】:

    标签: django email-validation


    【解决方案1】:

    我建议您将 EmailField 子类化,并将其 default_validators 集合替换为也支持新顶级 TLD 的自定义验证器。

    默认验证器是django.core.validators.validate_email,它又指向EmailValidator 的一个实例,显然您也必须对其进行子类化,并提供该子类的一个实例作为您的default_validators 属性中的唯一项EmailField 子类。

    您可能想看看 EmailValidator 的较新实现,它不仅支持长度为 2 到 63 个字符的 TLD,还支持 whitelist 参数,允许您在自定义有效域列表中注入.

    或者,当然,如果您更喜欢升级到更新的 Django 版本。我不确定何时添加了对更长 TLD 的支持,但我相信您可以通过查看发布日志或浏览源代码来弄清楚这一点。

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 2015-09-19
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 2011-10-18
      • 2013-06-08
      • 2014-06-18
      • 2020-08-17
      相关资源
      最近更新 更多