我正在尝试使用纯Javascript向我的Django视图发送POST请求(我不想涉及任何不必要的库)。数据不是通过表单发送的,而是使用fetch
发送的。现在,我只希望能够在自己的views.py中操纵request.POST
。
这是我的代码:
JavaScript
let article = document.querySelector('article')
articleId = article.getAttribute('data-product-id')
# some other stuff
fetch("{% url 'shop:shoplist' 1 %}", {
method: 'POST',
dataType: "application/json",
data: {'article_id': articleId},
headers: {'X-CSRFToken': csrf_token}
})
Python
if request.method == 'POST':
testing = request.POST
return JsonResponse({'test': testing})
已发送请求,正确接收了csrftoken
,但是request.POST
仅返回了<QueryDict: {}>
,而不是我期望的值(标题,数据...)。 / p>
我搜索并发现了很多类似的问题,最相似的是this one,但我似乎仍然找不到解决方法。
有什么主意吗?
答案 0 :(得分:0)
request.POST
仅包含以形式编码的参数 。由于您的数据类型为application/json
,因此它们为空。 request.body
包含实际的json数据。
答案 1 :(得分:0)
尝试在fetch
调用的标头中添加“内容类型”(而不是dataType参数),然后将数据参数更改为带有字符串化对象的主体:
fetch("{% url 'shop:shoplist' 1 %}", {
method: 'POST',
body: JSON.stringify({'article_id': articleId}),
headers: {
'X-CSRFToken': csrf_token,
'Content-Type': 'application/json'
}})