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

Django 5.0中基于类的LogoutView用GET登出报405错误的解决方法

解决Django 5.0中LogoutView GET请求405错误的方法

方法一:使用POST表单实现登出(官方推荐,更安全)

Django 5.0移除GET登出是为了避免CSRF攻击风险,官方推荐通过POST请求完成登出操作,具体步骤如下:

  1. 在登出按钮所在的模板中,替换原来的GET链接为POST表单:
<form method="POST" action="{% url 'logout' %}">
    {% csrf_token %}
    <button type="submit">登出</button>
</form>
  • 必须包含{% csrf_token %},这是Django的CSRF防护机制要求,避免跨站请求伪造。
  • 点击按钮时会以POST方式提交请求到登出路由,触发LogoutView完成登出逻辑。
  1. 若之前是用<a>标签直接跳转登出链接,需将其替换为上述表单按钮,禁止再使用http://127.0.0.1:8000/accounts/logout这类GET请求链接。

方法二:自定义视图支持GET登出(不推荐,存在安全风险)

如果因业务场景必须保留GET方式登出,可以自定义LogoutView重写GET方法,但需明确这种方式容易被恶意网站通过图片、链接等触发强制登出:

  1. 在项目的views.py中创建自定义视图:
from django.contrib.auth.views import LogoutView

class CustomLogoutView(LogoutView):
    def get(self, request, *args, **kwargs):
        # 将GET请求转为POST请求处理
        return self.post(request, *args, **kwargs)
  1. 在urls.py中替换默认的登出路由,指向自定义视图:
from django.urls import path
from .views import CustomLogoutView

urlpatterns = [
    # 其他路由...
    path('accounts/logout/', CustomLogoutView.as_view(), name='logout'),
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:52:02