2012-05-09 108 views
5

我發送一個POST AJAX請求使用Angularjs和它的$ http模塊到Django服務器。這裏是一個例子:發送數據從angularjs到django

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

問題是我在Django中得到的。無論我發送的數據是什麼,始終是QueryDict的對象和值的關鍵總是一個空列表。

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

我沒有一個線索爲什麼。我錯過了什麼?

我幾乎使用默認創建的Django應用程序與默認中間件。我只創建了一個視圖並在url config中設置了一個url。 Django的版本是1.3。我配置了angular的$ http模塊,總是發送一個包含csrf標記的頭文件來滿足Django。

回答

6

我相信django認爲你發送一個urlencoded表單,例如。鍵=值&鍵2 =值...

,如果你想嘗試:

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

你應該得到

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

您可以隨時獲取數據(原始正文內容)如下:

request.body 

希望這是你在找什麼。

+0

謝謝你的工作!但是,你能解釋爲什麼django認爲它的urlencoded數據?如果有可能定製它? – davekr

+1

request.GET和request.POST包含預處理的鍵/值數據 - 如果您想要原始數據(例如JSON或純文本),請嘗試:request.raw_post_data –

7

我用jQuery param函數解決了這個問題。我認爲這是更優雅的解決方案。

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

現在它就像我想要的那樣工作。