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请求并指定跳转目标:
- 在
urls.py中导入相关模块:
from django.contrib.auth import views as auth_views from django.conf import settings
- 替换原有的
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
相关产品推荐
相关产品推荐

