2015-03-13 47 views
3

我試圖將嵌套字典作爲參數傳遞給由Flask工作人員處理的GET請求。整個設置是Nginx + Gunicorn + Flask。在客戶端,我做了以下內容:如何將嵌套字典傳遞給Flask的GET請求處理程序

import requests 

    def find_cabin(): 
     party = {'People' : [{'Age': 44, 'Gender': 'F', 'Habits': 'Smoking,Drinking'}, {'Age': 9, 'Gender': 'F'} 
        , {'Age': 4, 'Gender': 'F'}, {'Age': 49, 'Gender': 'M'}], 
       'Vehicles': [{'Make/Model': 'Honda Civic'}, {'Make/Model': 'Toyota RAV4'}], 
       'Must Haves':['Deck', 'Fireplace', 'Boat launch', {'Bedrooms': 2}]} 
     uri = 'mysite.com/find_cabin' 
     headers = {'Content-Type': 'application/json', 'Accept': 'text/plain'} 
     res = requests.get(uri, data=json.dumps(party), headers=headers) 
     return res.text 

在服務器上,在我的瓶的處理程序,我這樣做:

@app.route('/find_cabin/', methods=['GET']) 
def find_cabin(): 
    payload = request.data 
    # payload is empty 
    print ('payload for find_cabin: ', payload) 
    #process request 

有效載荷爲空。我錯過了什麼?我應該如何將複雜的嵌套結構傳遞給我的Flask應用程序?

回答

2

GET方法沒有正文。將數據編碼爲查詢參數,或者使用POST請求。如果你想使用讓你可以只編碼JSON作爲查詢參數

requests.post(url, json=party) 

# within the view 
party = request.get_json() 

:如果您使用POST,你可以直接通過數據作爲JSON。

requests.get(url, params={'party': json.dumps(party)}) 
# within the view 
party = json.loads(request.args['party']) 

你也可以嘗試想出一些方案來將嵌套結構扁平化爲查詢參數,但這不是直截了當的。簡單的嵌套可以使用'。'分隔路徑,列表可以多次指定鍵,但是如果嵌套對象是嵌套列表呢?

這不是一個很好的查詢參數的使用,在這種情況下發送POST正文會更有意義。

相關問題