React-Django简易博客应用中如何在Axios Delete请求中携带Body并在Django后端获取
解决Django后端获取Delete请求Body参数的问题
首先,咱们先从前端的axios请求开始排查——你当前的axios.delete用法有问题,这可能是后端拿不到数据的第一个原因。
第一步:修正前端的Delete请求写法
Axios的delete方法参数格式是:axios.delete(url[, config]),你不能直接把blog_title作为第二个参数传进去,要把请求体数据放在config的data字段里。另外,建议把Content-Type换成application/json,这样前后端解析起来更方便(DRF默认支持JSON格式)。修改后的代码如下:
class BlogPost extends React.Component { deleteBlog = (blog_title) => { const headers = { "Content-Type": "application/json", Accept: "application/json", } // 正确的axios.delete写法:数据放在config.data里 axios.delete("delete_blog/", { headers: headers, data: { title: blog_title } }).then(res => { console.log(res.data); // 这里可以添加删除后的状态更新逻辑,比如刷新博客列表 }).catch(err => { console.error(err); }) } render() { return ( <div> {/* 注意map要加key,onClick里要调用this.deleteBlog */} { this.state.blogs.map(res => ( <div key={res.id}> {res.blog_title} <button onClick={() => this.deleteBlog(res.blog_title)}>删除</button> </div> ))} </div> ) } }
第二步:后端Django获取Delete请求的Body
你用的是DRF的APIView,这就好办了——DRF会自动根据请求的Content-Type解析请求体,把数据放到request.data里,不管是POST、PUT还是DELETE请求都能直接用。
修改你的views.py代码:
from rest_framework.views import APIView from rest_framework.response import Response class BlogPost(APIView): def post(self, request, *args, **kwargs): # 你的POST逻辑 pass def delete(self, request, *args, **kwargs): # 直接从request.data里拿参数 blog_title = request.data.get('title') print("要删除的博客标题:", blog_title) # 这里写你的删除逻辑,比如根据title查询并删除博客 # BlogModel.objects.filter(blog_title=blog_title).delete() return Response({"message": f"博客{blog_title}已删除"})
为什么self.request.POST拿不到数据?
Django原生的request.POST只会解析POST请求中application/x-www-form-urlencoded或multipart/form-data格式的表单数据,对于DELETE请求的请求体,Django不会自动解析到POST这个QueryDict里,所以你打印出来是空的。而DRF的request.data会处理所有HTTP方法的请求体,不管是JSON还是表单格式,都能正确解析。
如果不用DRF,用原生Django视图的话,你需要自己解析request.body:
import json def delete(request): # 解析JSON格式的请求体 body_data = json.loads(request.body) blog_title = body_data.get('title') # 后续逻辑...
内容的提问来源于stack exchange,提问作者user19652801
相关产品推荐
相关产品推荐

