You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中LOGOUT_REDIRECT_URL无法跳转到指定页面求助

Django登出功能无法跳转/生效的解决方案

问题根源

Django自带的logout视图(包括django.contrib.auth.urls中的默认视图和auth_views.LogoutView)默认要求通过POST请求触发登出操作。直接用<a>标签的GET请求访问logout路径,只会进入登出确认页面,不会执行登出,自然也不会触发LOGOUT_REDIRECT_URL的跳转。


解决方案一:用表单提交POST请求(推荐,符合安全规范)

修改home.html中的登出部分,用表单包裹并添加CSRF令牌:

{% if user.is_authenticated %}
     <p>Hi, {{ user.username }}</p>
     <form method="post" action="{% url 'logout' %}">
         {% csrf_token %}
         <button type="submit">Log out</button>
     </form>          
{% else %}
     <p>You are not logged in</p>
     <p><a href="{% url 'login'  %}">Log In</a></p>
{% endif %}       

点击提交按钮后,POST请求会直接执行登出,随后自动跳转到settings.py中LOGOUT_REDIRECT_URL指定的home页面。


解决方案二:允许GET请求登出(不推荐,存在CSRF风险)

如果必须使用<a>标签的GET请求,需手动配置LogoutView,允许处理GET请求并指定跳转目标:

  1. 在urls.py中导入相关模块:
from django.contrib.auth import views as auth_views
from django.conf import settings
  1. 替换原有的include('django.contrib.auth.urls')或添加如下路径(确保路径不冲突):
path('accounts/logout/', auth_views.LogoutView.as_view(
    next_page=settings.LOGOUT_REDIRECT_URL,
    allow_http_methods=['GET', 'POST']
), name='logout'),

此时点击<a href="{% url 'logout' %}">Log out</a>的GET请求会直接执行登出并跳转。


你之前手动配置失败的原因

  • 路径配置错误:你之前设置的path('', ...)会匹配根路径,与home路径冲突,导致请求未正确路由到LogoutView。
  • 未允许GET请求:默认LogoutView仅处理POST请求,GET请求只会返回确认页面,不会执行登出操作。

内容的提问来源于stack exchange,提问作者Ulad Shuhayeu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:35:13