Django中断包含“注销”的网址

时间:2018-06-20 17:56:30

标签: django python-3.x authentication

我正在使用具有用户帐户以及登录和注销功能的Django网络应用。

我想拥有的是mywebsite.com/accounts/login/作为登录页面。目前,此功能正在按预期运行。

此问题与注销有关-我想拥有的是mywebsite.com/accounts/logout/注销用户并将其重定向到登录页面。但是,这似乎不起作用。

这是我在account / urls.py中的url配置:

from . import views

urlpatterns = [
    url(r'^login/$', views.LoginView.as_view(), name='login'),
    url(r'^logout/$', auth_views.logout, name='logout'),
]

使用此配置,登录正常。但是当我访问mywebsite.com/accounts/logout/时,我会立即被发送回我当前所在的页面。

但是,如果我更改注销网址:

from . import views

urlpatterns = [
    url(r'^login/$', views.LoginView.as_view(), name='login'),
    url(r'^logMeOutPlease/$', auth_views.logout, name='logout'),
]

然后,mywebsite.com / accounts / login按预期工作,而mywebsite.com/accounts/logMeOutPlease按预期工作。第一种配置不起作用是有原因的吗?

但是,如果我将注销功能移到顶层(即,仅mywebsite.com/logout/),则它再次可以正常工作。

作为参考,这是“顶级” URL文件中的内容:

urlpatterns = [
    # other urls that I can't show here
    url(r'^redirect/',  include('mywebsite.apps.redirect.urls')),
    url(r'^accounts/',  include('mywebsite.apps.accounts.urls')),
    url(r'^$',       RedirectView.as_view(url='redirect/')),
    url(r'^admin/',  admin.site.urls),
]

我正在使用Django 2.0.6和Python 3.5.2,我的笔记本电脑是在Ubuntu 16.04上。

1 个答案:

答案 0 :(得分:0)

好吧,据我到目前为止的了解,这种行为实际上是正确的。由于在您的问题中未提供视图逻辑,因此我将假定视图当前未使用任何@login_required装饰器,并且注销视图会执行其所说的操作,即注销。因此,在没有看到视图逻辑的情况下,我们假设没有关于成功注销时重定向到何处的说明,并且没有装饰器,因此再次打开同一页面。

这是建议。

在settings.py文件中:-

添加:

LOGOUT_REDIRECT_URL ='url_you_want_to_redirect_to_on_logout'

这将使用户每次注销时都能重定向到指定的URL。

如果有帮助,类似地,我们也有一个 LOGIN_REDIRECT_URL ='url_you_want_to_redirect_to_on_login'