2012-05-09 15 views
5

Ich sende eine POST AJAX Anfrage mit Angularjs und seinem $ http Modul zum Django Server. Hier ein Beispiel:Senden von Daten von angularjs an django

$http({ 
     method: 'POST', 
     url: '/url/', 
     data: 'test data' 
    }). 
    success(function(data, status, headers, config) { 
     doSomeStuffWhenSuccess(); 
    }); 

Das Problem ist, was ich in Django bekomme. Egal was ich die Daten sende ist immer der Schlüssel von QueryDict Objekt und Wert davon ist immer eine leere Liste.

<QueryDict: {u'test data': [u'']}> 

Ich habe keine Ahnung warum. Was vermisse ich?

Ich verwende fast standardmäßig erstellte Django-Anwendung mit Standard-Middlewares nur. Ich habe nur eine Ansicht erstellt und eine URL in der URL-Konfiguration festgelegt. Version von Django ist 1.3. Und ich konfigurierte das http-Modul von angular, um immer eine Kopfzeile mit einem csrf-Token zu senden, um Django zu befriedigen.

Antwort

6

Ich glaube, Django denkt, Sie senden eine urlencodierte Form, z. Schlüssel = Wert & key2 = Wert2 ...

wenn Sie würde versuchen:

$http({ 
    method: 'POST', 
    url: '/url/', 
    data: 'test=data' 
}) 

Sie

<QueryDict: {u'test': [u'data']}> 

Sie können die Daten (Rohkarosse Gehalt) immer erhalten erhalten sollte wie folgt :

request.body 

Hoffe, das ist, was Sie suchen.

+0

Danke das funktioniert! Aber könnten Sie erklären, warum Django seine urlencodierten Daten denkt? Und wenn es möglich ist, es anzupassen? – davekr

+1

request.GET und request.POST enthalten vorverarbeitete Schlüssel-/Wertdaten. Wenn Sie Rohdaten (z. B. JSON oder Nur-Text) verwenden möchten, versuchen Sie Folgendes: request.raw_post_data –

7

Ich löste dies mit jQuery Param-Funktion. Ich denke, es ist elegantere Lösung.

$http({ 
    method: 'POST', 
    url: '/url/', 
    data: $.param({test: data}) 
}) 

Jetzt funktioniert es wie ich wollte.

Verwandte Themen