我需要进行一个非常简单的修改 - 要求某些视图仅在用户未经过身份验证时显示 - 才能显示django-registration默认视图。例如,如果我已登录,则不希望用户再次访问/注册页面。
所以,我认为这里的想法是我想从django-registration中继承register
视图。这就是我不确定如何继续的地方。这是正确的方向吗?我应该在这里测试用户的身份验证状态吗?欢迎提示和建议!
修改
我认为这是正确的方法:Django: Redirect logged in users from login page
修改2
解决方案:
创建另一个应用,例如custom_registration
,并写一个这样的视图(我也使用自定义表单):
from registration.views import register
from custom_registration.forms import EduRegistrationForm
def register_test(request, success_url=None,
form_class=EduRegistrationForm, profile_callback=None,
template_name='registration/registration_form.html',
extra_context=None):
if request.user.is_authenticated():
return HttpResponseRedirect('/')
else:
return register(request, success_url, form_class, profile_callback, template_name, extra_context)
我必须使用相同的函数参数,否则只包括测试,如果我们通过它,继续使用main函数。
不要忘记把它放在你的URLConf中(再次,这包括一些关于我的自定义表单的东西):
顶级URLConf
(r'^accounts/', include('custom_registration.urls')),
(r'^accounts/', include('registration.urls')),
custom_registration.views
from django.conf.urls.defaults import *
from custom_registration.views import register_test
from custom_registration.forms import EduRegistrationForm
urlpatterns = patterns('',
url(r'^register/$', register_test, {'form_class': EduRegistrationForm}, name='registration.views.register'),
)
答案 0 :(得分:5)
据我所知,django-registration使用的是基于函数的视图,所以你不能真正将它们子类化。我通常遵循的方法是“覆盖”原始视图(当然不修改django-registration app)。这样的工作方式如下:
urls.py
,在您的情况下需要包含另一个views.py
register
视图代码复制到新views.py
并修改它,向urls.py
添加一个模式以指向此视图(使用与django中相同的网址格式 - 注册此视图)include
的项目urls.py
中,包括原始django-registration应用。例如,这可能是这样的:urls.py
这很简单,因为urlpatterns = patterns('',
...
url(r'^accounts/', include('custom_registration.urls')),
url(r'^accounts/', include('registration.backends.default.urls')),
...
)
的第一个匹配网址格式将指向您的新应用,因此它永远不会尝试从原始应用中调用该模式。