【问题标题】:Django breaks on urls containing "logout"Django 在包含“注销”的 url 上中断
【发布时间】:2018-11-29 22:48:45
【问题描述】:

我正在开发一个 Django 网络应用程序,它有用户帐户,也有登录和注销功能。

我想要的是 mywebsite.com/accounts/login/ 作为登录页面。这正在按预期工作。

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

这是我在 accounts/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/),那么它又可以正常工作了。

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

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。

【问题讨论】:

  • 你能提供主要的urls.py & accounts/urls.py 吗?这将有助于调试代码
  • 我已经添加了主要的 urls.py。我已经向你展示了所有的 accounts/urls.py,减去了一些导入

标签: django python-3.x authentication


【解决方案1】:

好的,从我目前的理解来看,这种行为实际上是正确的。由于您的问题中未提供视图逻辑,因此我将假设视图当前未使用任何 @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'

【讨论】:

  • 我已经按照我的意愿配置了 LOGOUT_REDIRECT_URL。问题是,如果我希望注销 url 为“mywebsite.com/accounts/logout/”,则转到该 url 不会执行任何操作(您停留在当前所在的页面上)。但是,如果我将“mywebsite.com/accounts/SOMTIHNGELSE/”设置为注销 url,那么注销会按预期工作并重定向。
  • 好吧,似乎一切都还不错。可能是某个地方的拼写错误导致了这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
相关资源
最近更新 更多