2012-05-09 19 views
5

Wysyłam żądanie POST AJAX przy użyciu Angularjs i jego modułu $ http do serwera Django. Oto przykład:wysyłanie danych z angularjs do django

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

Problem pojawia się w Django. Bez względu na to, co wysyłam, dane są zawsze kluczem do obiektu, a wartość tego zawsze jest pustą listą.

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

Nie mam pojęcia dlaczego. czego mi brakuje?

Używam prawie domyślnie stworzonej aplikacji Django tylko z domyślnymi middleware. Stworzyłem tylko widok i ustawiłem URL w konfiguracji adresu URL. Wersja Django to 1.3. I skonfigurowałem moduł $ http, aby zawsze wysyłać nagłówek zawierający token csrf, aby zadowolić Django.

Odpowiedz

6

Wierzę, że django uważa, że ​​wysyłasz formularz o kształcie wklęsłym, np. klucz = wartość & klucz2 = wartość2 ...

jeśli chcesz spróbować:

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

Powinieneś dostać

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

Zawsze można uzyskać dane (surowe Zawartość ciała) w następujący sposób :

request.body 

Mam nadzieję, że to jest to, czego szukasz.

+0

Dzięki temu działa! Ale czy mógłbyś wyjaśnić, dlaczego django myśli o swoich danych z wąskimi kreskami? A jeśli można go dostosować? – davekr

+1

request.GET i request.POST zawierają wstępnie przetworzone dane klucz/wartość - jeśli chcesz dane surowe (takie jak JSON lub zwykły tekst) spróbuj: request.raw_post_data –

7

Rozwiązałem to za pomocą funkcji param jQuery. Myślę, że to bardziej eleganckie rozwiązanie.

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

Teraz działa tak, jak chciałem.