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

RTK Query POST请求在Django REST服务器报错405:不允许GET方法

问题解决:RTK Query POST请求触发Django 405错误(GET方法不允许)

核心原因分析

你遇到的问题本质是实际发送的请求路径或方法与后端预期不匹配,明明配置了POST却触发GET错误,大概率是以下两种情况:

1. 前后端URL路径不匹配

前端RTK Query中配置的请求URL是users/token,但后端Django的路由是token/,两者路径完全不一致。当请求发送到不存在的users/token路径时,Django可能误匹配到某个仅允许GET请求的端点,或者触发自动重定向后将POST转为GET。

2. Django的APPEND_SLASH机制导致重定向

Django默认开启APPEND_SLASH=True,如果前端请求的URL不带末尾斜杠(比如token而非token/),Django会返回301重定向到带斜杠的地址,此时浏览器会自动将POST请求转为GET,导致后端收到GET请求,而ObtainAuthToken视图仅支持POST,因此返回405错误。

具体修复步骤

步骤1:修正前端请求URL

将RTK Query中loginUser的URL修改为与后端路由一致的路径:

// apiSlice.ts
loginUser: build.mutation<ITokenRes, IAuthCredentials>({
    query: (authCredentials) => ({
        url: 'token/', // 改为和后端一致的路径,带末尾斜杠
        method: 'POST',
        body: authCredentials
    })
})

同时确保baseUrl配置正确,比如后端API前缀是http://localhost:8000/api/,那么baseUrl就要设为这个值,最终请求地址会是http://localhost:8000/api/token/,和后端路由完全匹配。

步骤2:验证实际请求(可选但推荐)

打开浏览器开发者工具的网络面板,触发登录请求后查看:

  • 请求方法是否为POST
  • 请求URL是否与后端路由一致
  • 是否存在301重定向记录

步骤3:检查Django配置(可选)

如果确认路径匹配但仍有问题,可以临时关闭APPEND_SLASH(不推荐长期使用,建议保持URL风格一致):

# settings.py
APPEND_SLASH = False

额外验证

ObtainAuthToken视图默认只接受POST请求,你的后端代码继承自它,无需额外修改方法权限,只要请求路径和方法正确就能正常处理登录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:45:25