Bonjour,
J'ai une application Django où je veux faire du POST en cliquant sur <button>
qui n'est pas dans <form>
Le problème est que les données envoyées à la fonction de visualisation ne sont pas envoyées correctement.
Voici le code 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);
});
et ici voir le code :
def my_view(request):
print request.POST
return HttpResponse('XX')
Je ne peux pas accéder aux données request.POST car la clé est un dict entier et une liste vide de valeurs :
<QueryDict: {u'{"obj_id":"182","content_type":"video","like":true}': [u'']}>
Le problème est que les objets sont sérialisés en JSON par défaut alors que vous devez envoyer les données au format `application/x-www-form-urlencoded'. La solution la plus simple est d'utiliser une bibliothèque comme qs :
var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });
Voir ce commentaire pour plus de détails.
J'espère que cela t'aides!
Une autre façon consiste à mettre les valeurs dans l'objet FormData et à publier
J'ai écrit un petit wrapper autour d'axios qui fonctionne bien avec les paramètres par défaut de Django >1.8. J'espère que cela aide quelqu'un !
Commentaire le plus utile
Le problème est que les objets sont sérialisés en JSON par défaut alors que vous devez envoyer les données au format `application/x-www-form-urlencoded'. La solution la plus simple est d'utiliser une bibliothèque comme qs :
Voir ce commentaire pour plus de détails.
J'espère que cela t'aides!