【发布时间】:2021-08-02 05:00:52
【问题描述】:
我对 Django 后端服务器进行了 javascript fetch API 调用
const res = fetch(url, {
credentials: 'include',
method: 'POST',
mode: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': csrftoken
},
body: JSON.stringify(requestBody),
})
.then((response) => response.json())
.then((responseJson) => {
return responseJson.movies;
})
.catch((error) => {
console.error(error);
});
如果我在请求中使用它之前在控制台上输出requestBody,它看起来如下
{"add-Choice":["L"],"add-Left":["1"],"add-Right":["1"],"add-Value":["100"],"add-match":["8"],"user":["siteuser1"],"csrfmiddlewaretoken":["3K89ZvofjhIL2nZQoCcxphjmXborujsaLPn2FzlYiVmiBLODWhQQiAB5BhSXkQcF"],"add":["Submit"]}
这里的字符串“add-”被用作 Django 侧视图 post 方法的表单前缀。 但是,在服务器视图方面,如果我按如下方式打印 request.POST
def post(self, request, *args, **kwargs):
print('Post request: ', request.POST)
我得到的输出是一个空的 QueryDict,如下所示
Post request: <QueryDict: {}>
Internal Server Error: /matchoffers/8
请求被发送到正确的 URL,并被正确的 view-post 方法获取。但它失败了,因为请求是空的。
【问题讨论】:
-
我怀疑
requestBody已经是JSON了,你不需要再把它串起来。 -
这能回答你的问题吗? Django & TastyPie: request.POST is empty
-
@Ivar 这是正确的指针。但是,该页面上接受的答案存在小问题。数据存在于 request.body 中。但是,我在访问该数据时遇到了问题。有一些错误说从请求的数据流中读取后无法访问正文。我能够通过 request.data 访问表单数据。长话短说,如果你在 fetch->body 中使用带有表单数据的 fetch api,那么在服务器端使用 request.data。
标签: javascript django fetch-api