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