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

Axios PUT请求与Django Rest Framework交互异常求助

解决Axios向DRF发送PUT请求返回React index.html的问题

看起来你遇到的核心问题是前端路由拦截了API请求,导致Axios收到的是React的index.html而非DRF的响应——这也解释了为什么Postman测试正常(它直接请求后端,不会经过前端路由)。下面是具体的排查和解决步骤:

1. 先确认API请求地址的正确性

这是最常见的原因:

  • 如果你的前端(比如React)和后端(Django)在开发环境下是分开运行的(比如前端在localhost:3000,后端在localhost:8000),你必须使用绝对路径作为API地址,比如:

    const API_URL = "http://localhost:8000/api/url/";
    

    如果你用了相对路径/api/url/,请求会被前端的开发服务器处理,而非转发到后端Django,最终被React Router捕获并返回index.html。

  • 如果你想保持相对路径,可以用Create React App的代理功能:在package.json中添加一行:

    "proxy": "http://localhost:8000"
    

    这样所有相对路径的API请求都会自动转发到后端服务器,避免前端路由拦截。

2. 检查React Router的路由配置

确保你的React路由不会匹配到API路径:

  • 如果有通配符路由(比如<Route path="*" component={NotFoundPage} />),一定要把它放在所有路由的最后,避免提前捕获API请求路径。
  • 确认API的路径(比如/api/url/)没有和React的页面路由重名。

3. 验证Django的URL路由配置

确保后端的API路由是正确配置的,比如在urls.py中:

from django.urls import path
from .views import TestView

urlpatterns = [
    path('api/url/', TestView.as_view(), name='test-api'),
    # 其他路由...
]

可以直接在浏览器访问http://localhost:8000/api/url/(用GET请求,会返回405 Method Not Allowed,这是正常的),确认页面是DRF的错误响应而非React的index.html。

4. 用浏览器Network面板排查请求细节

打开浏览器的开发者工具→Network面板,找到PUT请求:

  • 查看Request URL是否正确指向后端地址。
  • 查看Response标签,确认返回的内容是不是index.html,如果是,说明请求确实没到后端。
  • 检查请求头里的X-CSRFToken是否存在且正确(虽然之前解决了403,但可以再确认一次)。

5. 补充Axios的调试代码

可以在Axios请求前打印API地址,确认没有拼写错误:

console.log("当前请求的API地址:", API_URL);
return axios({
    method: "put",
    url: API_URL,
    data: alterRecord
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:12:01