Olá,
Eu tenho um aplicativo django onde desejo fazer um POST clicando em <button>
que não está em <form>
O problema é que os dados enviados para a função de visualização não estão sendo enviados corretamente.
Aqui está o código 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);
});
e aqui veja o código:
def my_view(request):
print request.POST
return HttpResponse('XX')
Não consigo acessar os dados request.POST porque a chave é um dicionário inteiro e uma lista vazia de valores:
<QueryDict: {u'{"obj_id":"182","content_type":"video","like":true}': [u'']}>
O problema é que os objetos são serializados para JSON por padrão, enquanto você precisa enviar os dados no formato `application / x-www-form-urlencoded '. A solução mais fácil é usar uma biblioteca como a qs :
var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });
Veja este comentário para detalhes.
Espero que isto ajude!
Outra maneira é colocar os valores no objeto FormData e postar
Eu escrevi um pequeno wrapper aroud axios que funciona bem com configurações Django> 1.8 padrão. Espero que isso ajude alguém!
Comentários muito úteis
O problema é que os objetos são serializados para JSON por padrão, enquanto você precisa enviar os dados no formato `application / x-www-form-urlencoded '. A solução mais fácil é usar uma biblioteca como a qs :
Veja este comentário para detalhes.
Espero que isto ajude!