Django对特定域电子邮件地址的注册限制

时间:2013-01-23 21:28:49

标签: django django-models django-forms django-templates django-registration

对于Django来说还是比较新的,并且对Django注册有疑问。

我已经成功完成并通过电子邮件验证正确注册用户,现在我想要做的是修改功能,以便只允许具有特定域电子邮件地址的人注册。例如,如果“xyz.org”是域名,则只有尝试使用blahblahblah@xyz.org电子邮件注册的用户才会成功。

下面是我到目前为止处理这一切的相关代码,减去注册成功等等。我认为我基本上只需要能够插入一种新的表单对象来验证电子邮件字段,但我不确定怎么样。非常感谢所有的冗长,因为我对此仍然有点粗糙。谢谢!

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 %}

1 个答案:

答案 0 :(得分: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')
    ...
)

我没有对此进行测试,但我希望它能让你走上正轨!