2013-07-06 48 views
0

我最近遞交了一個部分完成的項目,我剛剛使用Bottle。我有一種情況,我在AJAX請求中發送字典,Bottle在服務器端。字典看起來像這樣(在JavaScript中):Python Bottle:在請求中訪問數組變量POST數據

var myInt = 5; 
var myArray = [0, 1, 2]; 
var data = { 
    myInt: myInt, 
    myArray: myArray 
}; 

然後,在Python中,我想讀取這些數據。我似乎無法獲得數組。我可以得到int很好。我已經試過幾件事情,但這裏是什麼讓最有意義,我認爲仍然沒有奏效:

try: 
    myInt = int(request.forms.get('myInt')) 
    myArray = request.forms.getall('myArray') 

這導致myArray的空單。任何人都可以將我指向正確的方向嗎?我已經閱讀StackOverflow上的每個類似問題都無濟於事。

我知道我可以把它變成一個由管道或其他東西分隔的字符串,但我想看看是否有可能像這樣發送數組。

謝謝!

回答

1

使用request.json

try: 
    myInt = request.json['myInt'] 
    myArray = request.json['myArray'] 

(假設你的客戶端設置content-typeapplication/json

這裏是一個不錯的example

+0

謝謝!我在同一時間學習了許多新東西......我還不明白我能用瓶子裏的「請求」做什麼,然後我應該怎麼做......但是這個工作正常:) 感謝你的寶貴時間。 – MattM

+0

快樂幫助!我也想指出'request.json'的實現在每次調用時都解析整個body,所以我建議只調用一次,然後提取所需的任何屬性。我也會更新答案。 –

+0

劃痕 - 我只是仔細檢查,我認爲它緩存瞭解析值,所以不用擔心。繼續! :) –

1

不知道這是否是唯一的問題,但(我認爲)你可能會混淆JSON數組和使用getall。你應該用get,不getall,在這裏:

myArray = request.params.get('myArray') 

如果我理解正確的代碼,getall是當你有多個同名ARGS,在http://example.com/get?foo=1&foo=2的情況。

另一方面,您的myArray變量只是對數組的單個引用。

希望這有助於(即使它不能解決您的問題)。