Django无法处理HTTPPUT/DELETE请求-创新互联

后端API使用的框架是rest framework,前端通过GET获取列表,通过POST添加数据都没有问题

创新互联建站长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为永登企业提供专业的成都网站设计、网站制作,永登网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

但是通过DELETE方法进行删除操作的时候,有报错:

Django无法处理HTTP PUT/DELETE请求

奇怪,cookie里明明已经有了csrf的token,但是DELET方法好像就是识别不到,因而接口直接返回403

查了下资料:

因为POST请求,是将从csrftoken放在post参数中,但是django中对PUT/DELETE只能通过检查Header的方式来检查csrftoken

所以要么后端在接收PUT/DELETE请求后进行预处理,要么前端在PUT/DELETE方式增加一个Header

后端的解决方法暂时没找到好用的办法,前端处理这种情况很简单,在cookie中取csrftoken添加到请求头里即可:

export async function removeExport(params) {
return request('/api/collector/', {
method: 'DELETE',
body: {
...params,
method: 'delete',
},
headers:{
"X-CSRFToken": Cookies.get('csrftoken')
}
});
}

这样后端就可以正常拿到前端带过来的csrftoken进行认证

在使用PUT方法进行更新操作的时候,又遇到一个问题,不返回403了,改成405了

报错是PUT Method Not Allow,方法不被允许?

又检查了一下处理跨域的地方:

Django无法处理HTTP PUT/DELETE请求

大部分方法基本都允许了,但是看了下stackoverflow上面,说是请求的path俩面没有给修改的id

原本请求的url http://127.0.0.1:8080/api/promMonitor/

修改了下前端请求的path http://127.0.0.1:8080/api/promMonitor/1/

居然可以了,然后前端修改一下请求参数:把需要修改的id带到path里面即可

Django无法处理HTTP PUT/DELETE请求


分享名称:Django无法处理HTTPPUT/DELETE请求-创新互联
文章来源:http://myzitong.com/article/ceocoj.html