如何使用django-registration的不同视图?

时间:2013-05-04 21:48:41

标签: python django django-registration

我一直在尝试让django-registration使用视图RegistrationFormUniqueEmail并遵循此django-registration question的解决方案。我已将urls.py设置为

from django.conf.urls import patterns, include, url

from registration.forms import RegistrationFormUniqueEmail

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    (r'^users/', include('registration.backends.default.urls')),
    url(r'^users/register/$', 'registration.backends.default.views.RegistrationView',
        {'form_class': RegistrationFormUniqueEmail,
         'backend': 'registration.backends.default.DefaultBackend'},       
        name='registration_register'),
)

但是,我仍然可以使用相同的电子邮件创建多个帐户。问题是什么? django-registration不应该使用我指定的视图吗?我目前正在使用django-registration 0.9b1。

2 个答案:

答案 0 :(得分:17)

您正在使用的Django注册版本已被重写为使用基于类的视图。这意味着您的urls.py需要采用不同的方法。

首先,您需要子类化RegistrationView,并设置自定义表单类。

from registration.backends.default.views import RegistrationView
from registration.forms import RegistrationFormUniqueEmail

class RegistrationViewUniqueEmail(RegistrationView):
    form_class = RegistrationFormUniqueEmail

然后,在您的网址中使用自定义RegistrationViewUniqueEmail子类。与其他基于类的视图一样,您必须调用as_view()。

url(r'^user/register/$', RegistrationViewUniqueEmail.as_view(),
                    name='registration_register'),

确保在包含默认注册网址之前显示您的自定义registration_register视图,否则将不会使用它。

答案 1 :(得分:2)

django-registration-redux 1.2 版本允许使用以下 urls.py 模式的唯一电子邮件选项:

url(r'^accounts/register/$', RegistrationView.as_view(form_class=RegistrationFormUniqueEmail), name='registration_register'),
url(r'^accounts/', include('registration.backends.default.urls')),

如果您需要执行更多操作,例如特定网址选项,则可以在应用 views.py RegistrationView中将RegistrationForm子类化到您的应用 forms.py