javascript - 如何将数据从 React 发送到 Django API
问题描述
我正在尝试使用 django 将一些数据添加到数据库中。作为前端,我使用 React。
因此,fetch
请求如下:
const data = {
name: formData.name,
email: formData.email,
title: formData.title,
message: formData.message
};
fetch("/some/some_view/", {
method: 'POST',
headers: {
'Accept': 'application/json, text/plain, */*',
"Content-Type": "application/json"
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => {
debugger;
console.log('Success:', data);
})
.catch((error) => {
debugger;
console.error('Error:', error);
});
在 Django 中,我的观点如下:
@csrf_exempt
def some_view(request):
if request.method == 'GET':
return HttpResponse('Unauthorized', status=400)
if request.method == 'POST':
#TODO: Add security
item = json.loads(request.POST.get('body'), object_hook=json_util.object_hook)
pdb.set_trace()
return HttpJsonOk()
在request.POST
我得到我想要发送的数据如下:
<QueryDict: {u'{"name":"dsdsd","email":"dsdsd@dsds.com","title":"dsds jflj ","message":"dlkj lksj kmsdkk fljs m"}': [u'']}>
但我希望它在request.POST.get('body')
,但在那里我什么也得不到。
任何想法?
解决方案
request.POST
包含解析request.body
为表单编码内容的结果。请注意,真正的请求内容实际上是在request.body
(从您的视图中打印出来以了解它的样子)。
现在您的反应前端正在发布 json 内容,而不是表单编码的内容,因此您无法从中获取这些数据request.POST
- 正如您显然可以从 querydict 的样子中看出:
<QueryDict: {u'{"name":"dsdsd","email":"dsdsd@dsds.com","title":"dsds jflj ","message":"dlkj lksj kmsdkk fljs m"}': [u'']}>
如您所见,解析失败(因为它不是表单编码的),导致整个提交的 json 被用作键,没有关联的值。
IOW,LinnTroll 的建议实际上是正确的解决方案 - 任何 REST 框架(DRF、restless 等)FWIW 使用的解决方案 - :只需使用request.body
, 句号。
但我想要 request.POST.get('body') 中的数据
你不能,因为没有'body'键request.POST
。时期。
推荐阅读
- javascript - Excel - 使用 OfficeScript 以编程方式连接到 Web API
- ssl - pyodbc 无法通过 ssl 连接到 azure sql 的代理
- python-3.x - 将 https 代理与 aiohttp 一起使用
- python - grpc python测量响应时间
- python - 熊猫不返回单元格值(函数)
- powershell - 为所有人运行的 Powershell 命令
- python - 如何扩展这个对象检测 pytorch 程序来检测和分类多个类?
- upgrade - 将moodle 3.4升级到3.9
- excel - 从模块 1 宏调用此工作簿中的私有子/事件
- xpath - 在 XPATH 中是否可以通过属性值而不是名称来查找元素?