通过更改网址(身份验证/注册)

时间:2016-02-06 10:03:51

标签: django django-templates django-urls django-authentication django-registration

我在我的项目built-in auth tools和django-registration

中使用

我的登出模板位于:

/accounts/templates/registration/logout.html

如果urls.py看起来像:

urlpatterns = [
...
url(regex = r'^accounts/', view = include('registration.backends.hmac.urls')),
url(regex = r'^accounts/', view = include('django.contrib.auth.urls')),
...
]

它使用我的模板。没关系。

但是,如果我重新组织网址:

 urlpatterns = [
...
url(regex = r'^accounts/', view = include('django.contrib.auth.urls')),
url(regex = r'^accounts/', view = include('registration.backends.hmac.urls')),
...
]

它使用内置的管理员注销模板。

为什么会这样?

修改

their tutorial我看到他们说'registration.backends.hmac.urls':

  

该URLconf还设置了django.contrib.auth的视图(登录,   注销,密码重置等),虽然你想要那些视图   不同的位置,你可以包含()URLconf   registration.auth_urls只放置django.contrib.auth视图   您的网址层次结构中的特定位置。

但是当我打开它时,它似乎与auth urls / views无关: 编辑:好的,现在我明白了。

"""
URLconf for registration and activation, using django-registration's
HMAC activation workflow.

"""

from django.conf.urls import include, url
from django.views.generic.base import TemplateView
from .views import ActivationView, RegistrationView


urlpatterns = [
url(r'^activate/complete/$',
    TemplateView.as_view(
        template_name='registration/activation_complete.html'
    ),
    name='registration_activation_complete'),
# The activation key can make use of any character from the
# URL-safe base64 alphabet, plus the colon as a separator.
url(r'^activate/(?P<activation_key>[-:\w]+)/$',
    ActivationView.as_view(),
    name='registration_activate'),
url(r'^register/$',
    RegistrationView.as_view(),
    name='registration_register'),
url(r'^register/complete/$',
    TemplateView.as_view(
        template_name='registration/registration_complete.html'
    ),
    name='registration_complete'),
url(r'^register/closed/$',
    TemplateView.as_view(
        template_name='registration/registration_closed.html'
    ),
    name='registration_disallowed'),
url(r'', include('registration.auth_urls')),

2 个答案:

答案 0 :(得分:0)

registration.backends.hmac.urls中的last url pattern包含registration.auth_urls,其中提供了登录,注销等网址。

url(r'', include('registration.auth_urls')),

如果您在hmac网址上方添加django.contrib.auth.urls,则会使用django.contrib.auth的注销视图。此视图uses a different templateregistration/logged_out.html。由于您没有覆盖此内容,因此会使用管理员模板。

答案 1 :(得分:0)

将网址映射到视图的django url dipatcher按照从头到尾的顺序检查网址:

  

Django按顺序遍历每个URL模式,并在第一个时停止   一个与请求的URL匹配的。

因此,类似网址的顺序决定了哪个网址匹配。即第一个匹配。

相关问题