在Django上通过Javascript发送POST请求-无法检索数据

时间:2018-10-25 17:36:08

标签: javascript python django

我正在尝试使用纯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,但我似乎仍然找不到解决方法。

有什么主意吗?

2 个答案:

答案 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'
              }})