【问题标题】:Issue with Django logout URL redirectionDjango注销URL重定向问题
【发布时间】:2018-05-22 20:04:36
【问题描述】:

我在 Django 设置中配置了登录和注销重定向设置,如下所示 -

LOGOUT_REDIRECT_URL = '/login/'
LOGIN_REDIRECT_URL = '/locations/'

但是,在注销后,重定向是在 next= 参数上完成的,即,该 url 会重定向到单击注销时所在的同一页面。

作为参考,这里是我的 urls.py 中的登录/注销 URL -

url(r'^', include('rest_framework.urls', namespace='rest_framework')),

PS:我使用的是 Django 1.11 和 DRF 3.7.3

【问题讨论】:

  • 您想从您的 django 应用程序或 DRF 的可浏览 API 中退出吗?
  • 我想退出可浏览的 API。

标签: python django django-rest-framework django-authentication django-login


【解决方案1】:

上面的解决方案不适用于 Django 2.1+

查看注销功能源码后

from django.contrib.auth import logout

def logout_view(request):
  logout(request)
  # Redirect to a success page.

我最终创建了一个自定义注销视图,该视图调用注销函数并定义了一个重定向页面

from django.contrib.auth import logout
from django.conf import settings
from django.shortcuts import redirect

def logout_view(request):
  logout(request)
  return redirect('%s?next=%s' % (settings.LOGOUT_URL, request.path))

只需在您的 urls.py 中调用此视图,而不是“注销”

urlpatterns = [   
  path('accounts/logout/', views.logout_view),
]

现在 settings.py 中的 LOGOUT_URL 重定向将真正起作用

LOGOUT_URL = '/'

【讨论】:

  • 这太棒了!谢谢!
【解决方案2】:

我遇到了同样的问题。 LOGOUT_REDIRECT_URL 并不总是有效。

在我的 myapp/urls.py 中解决了它:

from django.contrib.auth.views import logout

urlpatterns = [
  url(r'^logout/$', logout, {'next_page': '/login/'}, name='logout'),
]

然后在我想要的模板中插入一个链接到:/'myapp'/logout/

你也可以在你的主 urls.py 中定义它

【讨论】:

  • 我会试试这个,我相信这会奏效。但是,有没有办法使用我提到的一个 URL 来做到这一点?
  • 我试过了,看来我必须添加一个用于注销和登录的模板。我将如何使用内置的 Django 登录模板?同样通过这种方式,我无法选择从可浏览的 API 中注销。像这样的东西 - i.imgur.com/oCi1jwc.png
  • Django 不包含内置登录模板。只有景色。但您可以在以下位置找到它的初始代码:docs.djangoproject.com/en/1.8/topics/auth/default/…
猜你喜欢
  • 2012-10-07
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 2011-01-05
相关资源
最近更新 更多