【问题标题】:email field in Django only for corporate emailsDjango 中的电子邮件字段仅适用于公司电子邮件
【发布时间】:2019-11-26 11:46:34
【问题描述】:

伙计们,是否可以在注册表单中将电子邮件输入限制为仅限公司电子邮件,例如 @bp.com @kpmg.com 等,从而消除非商业电子邮件,例如 gmail.com yahoo.com 等?这样如果用户插入 xxx@gmail.com 表单会拒绝并要求插入企业电子邮件?我在申请master时看到了这样的选项,他们需要推荐插入商务电子邮件。

您会建议寻找哪些来源或可以分享哪些代码示例?如果你能分享任何想法,那就太好了。

我的forms.py

从 django.contrib.auth 导入 get_user_model 从 django.contrib.auth.forms 导入 UserCreationForm

class UserCreateForm(UserCreationForm):

    class Meta:
        fields = ('username','email','password1','password2')
        model = get_user_model()

    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.fields['username'].label = 'Display Name'
        self.fields['email'].label = 'Email Address'

任何帮助将不胜感激。

【问题讨论】:

    标签: django authentication


    【解决方案1】:

    您可以在字段中添加验证器以检查域:

    from django.core.validators import RegexValidator
    
    domain_validator = RegexValidator(
        regex='@(bp\.com|kpmg\.com)$',
        message='Domain not valid',
        code='invalid_domain',
    )
    
    class UserCreateForm(UserCreationForm):
        email = forms.EmailField(validators=[domain_validator])
    
        # ...
    

    正则表达式可能可以改进,但它应该可以工作

    【讨论】:

      【解决方案2】:

      实际上没有任何最佳方法可以做您想做的事情,django 中没有,因为它不完全是 django 问题。

      但是,已经说过我们可以通过一种未优化的方式来做到这一点,即我们可以创建一个电子邮件黑名单,例如googleyahoohotmail 等。 由于此类公司数量众多,因此我们无法一次将它们全部添加,因为我们不了解它们。
      但随着时间的推移,我们可以不断更新我们的黑名单,也许我们可以随着时间的推移实现您想要实现的目标。
      this 此处的回答中,有人提供了一个预先创建的黑名单的链接,其中包含许多您可以添加到黑名单中的此类电子邮件,但正如我之前所说,此列表可能永远不会完整。
      鉴于您有此黑名单,如果提交的电子邮件不以简单 python 中的黑名单中的任何电子邮件结尾,您可以检查表单提交。

      P.S:在我看来,这样做没有任何意义,因为一些小型企业拥有gmail 地址。

      【讨论】:

        猜你喜欢
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 2017-06-26
        • 1970-01-01
        • 2021-11-27
        相关资源
        最近更新 更多