4

我一直在尝试让 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。

4

2 回答 2

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'),

确保在包含默认注册 url 之前出现自定义的 registration_register 视图,否则将不会使用它。

于 2013-05-04T22:34:18.887 回答
3

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

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

如果你需要做更多的事情,比如一个特定的 URL 选项,你可以RegistrationView在你的 app views.pyRegistrationForm你的 app forms.py 中子类化

于 2015-09-16T18:14:09.557 回答