Axios: Post sendet Daten nicht richtig

Erstellt am 18. Aug. 2016  ·  3Kommentare  ·  Quelle: axios/axios

Hallo,
Ich habe eine Django-Anwendung, in der ich einen POST durchführen möchte, indem ich auf <button> klicke, das nicht in <form>
Das Problem besteht darin, dass die an die Ansichtsfunktion gesendeten Daten nicht ordnungsgemäß gesendet werden.

Hier ist der Axios-Code:

 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);
    });

und hier Code anzeigen:

def my_view(request):
    print request.POST
    return HttpResponse('XX')

Ich kann nicht auf request.POST-Daten zugreifen, da der Schlüssel die gesamte dict and value empty list ist:
<QueryDict: {u'{"obj_id":"182","content_type":"video","like":true}': [u'']}>

Hilfreichster Kommentar

Das Problem ist, dass Objekte standardmäßig in JSON serialisiert werden, während Sie die Daten im Format `application/x-www-form-urlencoded' senden müssen. Die einfachste Lösung ist die Verwendung einer Bibliothek wie qs :

var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });

Details finden Sie in diesem Kommentar .

Hoffe das hilft!

Alle 3 Kommentare

Das Problem ist, dass Objekte standardmäßig in JSON serialisiert werden, während Sie die Daten im Format `application/x-www-form-urlencoded' senden müssen. Die einfachste Lösung ist die Verwendung einer Bibliothek wie qs :

var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });

Details finden Sie in diesem Kommentar .

Hoffe das hilft!

Eine andere Möglichkeit besteht darin, die Werte in das FormData-Objekt einzufügen und zu posten

Ich habe einen kleinen Wrapper um Axios geschrieben, der mit den Standardeinstellungen von Django > 1,8 gut funktioniert. Hoffe das hilft jemandem!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen