注销在 Django 中不起作用

Posted

技术标签:

【中文标题】注销在 Django 中不起作用【英文标题】:Signout is not working in Django 【发布时间】:2017-04-19 14:38:59 【问题描述】:

我尝试从模板调用注销 url,然后重定向到主页。

profile.html:

<li><a data-hover="Logout" href="% url 'signout' %">Logout</a></li>

urls.py:

urlpatterns = [
    url(r'^$', views.login, name='login'),
    url(r'^ajax/validate_username/$', views.validate_username, name='validate_username'),
    url(r'^signout$', views.signout, name='signout'),
]

views.py:

def signout(request):
    if request.user.is_authenticated():
        logout(request)
        return HttpResponsePermanentRedirect('/')
    else:
        return HttpResponsePermanentRedirect('/')

有时登出功能不工作,同时点击登出菜单(函数登出正在调用)。

【问题讨论】:

“不工作”是什么意思?你在视图中的断点被击中了吗?你登出了吗?你有什么错误吗? 它没有注销,也没有错误。单击注销菜单时正在加载同一页面。单击菜单时,它会调用函数(signout)并重定向到主页,但函数没有调用。 【参考方案1】:

您可能应该使用HttpResponseRedirect 而不是HttpResponsePermanentRedirect。因为如果您打算始终运行signout,永久重定向可能会使用您不需要的缓存。

你也可以像这样退出:

from django.contrib.auth import views as auth_views

urlpatterns = [
    ...
    url(r'^signout/$', auth_views.logout, 'next_page': 'home', name='signout'),
    ...
]

【讨论】:

谢谢,它使用 url 'localhost:8000'。但是,如果我使用 url '127.0.0.1:8000',则注销不起作用,而不是重定向到同一个工作页面。我可以知道原因吗? 从来没有遇到过 127.0.0.1 和 localhost 的区别。可能您已经在缓存中保存了一些 URL。清理缓存并重复您的请求。【参考方案2】:

你可以使用下面的代码,它会工作的。

url(r'^signout/$', 'django.contrib.auth.views.logout', 'next_page': '/login/', name='signout')

【讨论】:

以上是关于注销在 Django 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Instagram注销在iPhone中不起作用?

Facebook 注销在新 SDK 中不起作用

Firebase 注销在颤振应用程序中不起作用

单次注销在 keycloak 和 spring security 中不起作用

注销按钮在 mvc 应用程序中不起作用

Django注销不起作用