2

对Django来说相当新,并且对Django注册有一个疑问。Django注册限制到特定域名的电子邮件地址

我已经成功地将其注册并通过电子邮件验证正确注册用户,现在我想要做的是修改功能,以便只允许具有特定域电子邮件地址的用户注册。例如,如果“xyz.org”是域名,那么只有试图用[email protected]电子邮件注册的用户才会成功。

下面是我迄今为止处理它的所有相关代码,减去注册成功等。我认为我基本上只需要能够插入一种验证电子邮件字段的新型表单对象,但我不确定如何。所有的冗长都非常感谢,因为我在这方面还有点粗糙。谢谢!

url(r'^accounts/', include('registration.backends.default.urls') 

`

{% block content %} 

{% if form.errors %} 
<p>Reg form errors</p> 
{% endif %} 

<form method="post" action=''> 
{% csrf_token %} 
{{ form.as_p }} 

<input type="submit" value="Send activation email" /> 
</form> 

{% endblock %} 
+0

重写clean_email方法。请参阅https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean-method – dannyroa

回答

3

您将需要继承registration.forms.RegistrationForm并添加自定义validator的电子邮件领域,一个RegexValidator会工作。

from registration.forms import RegistrationForm 

class NewRegistrationForm(RegistrationForm): 
    def __init__(self, *args, **kwargs): 
     super(NewRegistrationForm, self).__init__(*args, **kwargs) 
     self.fields['email'].validators = [validate_domain] 

当您拥有验证器和新窗体后,您将不得不使用此新窗体作为注册视图。在您的urls.py

urlpatterns = patterns(
    ... 
    url(r'^register/$', register, { 'form_class': NewRegistrationForm }, name='registration_register') 
    ... 
) 

我没有测试过这一点,但我希望它让你在正确的轨道上!

相关问题