【问题标题】:django-registration email domain whitelistdjango-registration 邮箱域名白名单
【发布时间】:2016-02-23 14:05:59
【问题描述】:

我正在尝试为我的项目注册表设置电子邮件域白名单。

我正在使用django-registration

这是我的“注册”网址规则

urlpatterns = [
    ...
    url(r'^register/$',
        RegistrationView.as_view(),
        { 'form_class': EmailDomainFilterRegistrationForm },
        name='registration_register'),
    ...
]

这是我创建的EmailDomainFilterRegistrationForm

from django.core.validators import EmailValidator

from registration.forms import RegistrationForm

class EmailDomainFilterRegistrationForm(RegistrationForm):
    def __init__(self, *args, **kwargs):
        super(EmailDomainFilterRegistrationForm, self).__init__(*args, **kwargs)
        self.fields['email'].validators = [
            EmailValidator(whitelist=['epita.fr', 'lrde.epita.fr']),
        ]

问题是根本没有应用白名单。我可以使用任何我想要的电子邮件进行注册。

我做错了什么?

Django 版本 1.9.2

【问题讨论】:

    标签: python django


    【解决方案1】:

    这里是怎么做(正确的方法)。

    创建registration.forms.RegistrationForm的子类:

    class EmailDomainFilterRegistrationForm(RegistrationForm):
    
        def clean_email(self):
            submitted_data = self.cleaned_data['email']
    
            if not ALLOWED_DOMAINS: # If we allow any domain
                return submitted_data
    
            domain = submitted_data.split('@')[1]
            logger.debug(domain)
            if domain not in ALLOWED_DOMAINS:
                raise forms.ValidationError(
                    u'You must register using an email address with a valid '
                    'domain ({}). You can change your email address later on.'
                    .format(', '.join(self.allowed_domains))
                )
            return submitted_data
    

    从您正在使用的任何 django-registration 后端重复使用 django-registrationurls.py,并使用

    更改 registration_register url
    url(r'^register/$',
        RegistrationView.as_view(form_class=EmailDomainFilterRegistrationForm),
        name='registration_register'),
    

    RegistrationView 以上取决于您使用的是 django-registration 的哪个后端。不要从顶层views.py 导入它。使用以下语句中的 ONE 从适用的后端导入它:

    from registration.backends.hmac.views import RegistrationView
    from registration.backends.model_activation.views import RegistrationView
    from registration.backends.simple.views import RegistrationView
    

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 2010-10-19
      • 2011-09-15
      • 2016-01-17
      • 2016-07-23
      • 2019-11-05
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      相关资源
      最近更新 更多