RTK Query POST请求在Django REST服务器报错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

