Привет,
У меня есть приложение django, в котором я хочу выполнить POST, нажав на <button>
которого нет в <form>
Проблема в том, что данные, отправленные для функции просмотра, не отправляются должным образом.
Вот код axios:
axios({
method: 'post',
url: '/url/to/view'
data: {
obj_id: objectid,
content_type: contenttype,
like: !is_liked
},
xsrfCookieName: 'csrftoken',
xsrfHeaderName: 'X-CSRFToken',
headers: {'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
}).then(function (response) {
console.log(response);
});
и вот код просмотра:
def my_view(request):
print request.POST
return HttpResponse('XX')
Я не могу получить доступ к данным request.POST, потому что ключ - это весь dict и пустой список значений:
<QueryDict: {u'{"obj_id":"182","content_type":"video","like":true}': [u'']}>
Проблема в том, что по умолчанию объекты сериализуются в JSON, а вам нужно отправлять данные в формате application / x-www-form-urlencoded. Самое простое решение - использовать такую библиотеку, как qs :
var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });
См. Этот комментарий для подробностей.
Надеюсь это поможет!
Другой способ - поместить значения в объект FormData и опубликовать
Я написал небольшую оболочку aroud axios, которая отлично работает с настройками Django> 1.8 по умолчанию. Надеюсь, это кому-то поможет!
Самый полезный комментарий
Проблема в том, что по умолчанию объекты сериализуются в JSON, а вам нужно отправлять данные в формате application / x-www-form-urlencoded. Самое простое решение - использовать такую библиотеку, как qs :
См. Этот комментарий для подробностей.
Надеюсь это поможет!