【问题标题】:Signout is not working in Django注销在 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)并重定向到主页,但函数没有调用。

标签: python django logout


【解决方案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')

【讨论】:

    猜你喜欢
    • 2012-12-10
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2011-12-02
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多