Отправка запроса POST через Javascript на Django - не удалось получить данные - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь отправить POST-запрос в мое представление Django, используя обычный javascript (я не хочу, чтобы в него были вовлечены ненужные библиотеки).Данные отправляются не через форму, а с помощью fetch.Пока я просто хочу иметь возможность манипулировать request.POST в моем views.py, не более того.

Вот мой код:
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: {}> вместо того, что я ожидаю (заголовки, данные ...).

Я искал и нашел много похожих вопросов, наиболее похожим из которых является этот , но все же я не могу найтирешение.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Попробуйте добавить 'content-type' к заголовкам в вызове fetch (вместо параметра dataType) и изменить параметр данных на body с строковым объектом:

fetch("{% url 'shop:shoplist' 1 %}", { 
              method: 'POST',
              body: JSON.stringify({'article_id': articleId}),
              headers: {
                  'X-CSRFToken': csrf_token,
                  'Content-Type': 'application/json'
              }})
0 голосов
/ 25 октября 2018

request.POST содержит только параметры , которые закодированы в форме .Поскольку ваш тип данных application/json, они пусты.request.body содержит фактические данные JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...