2015-02-07 39 views
2

我想用Flask創建一個REST-Api。 作爲「框架」我發現這個Tutorial這似乎是有關使用瓶創建一個REST的API非常好,它似乎也容易...瓶沒有通過request.json檢索

我有這樣的功能:

@app.route('/api/users', methods=['POST']) 
def new_user(): 
    username = request.json.get('username') 
    password = request.json.get('password') 

但是,當我嘗試使用SOAPUI或HTTPRequester(在Firefox)發佈的數據,我總是得到一個服務器錯誤500

我的應用程序/ JSON數據是這樣的:

{ 
'username' : 'John', 
'password' : '1234' 
} 

我在兩個tols中檢查它是作爲application/json發送的。

所以我插入request.json之前如下:

if not request.json: 
    abort(400) 

現在它與代碼400中止 - 因此它似乎不是一個JSON對象,對不對?

然後我插入以下行:

{ 
    'username' : 'John', 
    'password' : '1234' 

    } 

我知道我可以用這個變換成百科:

test = request 
print test.data 

然後我看起來大部頭像JSON控制檯獲取這樣的:

dict = ast.literal_eval(test.data) 

但我想從燒瓶使用標準函數。

在此先感謝...

+0

爲什麼不使用'json'庫? 'my_dict_data = json.loads(request.data)' – ytpillai 2015-10-02 03:30:37

回答

0

首先檢查您的客戶端(JS或其他)發送的HTML標頭。 Content-Type應該是application/json。並使用request.get_json()。您可以嘗試使用request.get_json(force=True, silent=True)。此方法的燒錄代碼非常簡單,您可以調試它將斷點或寫入以便更好地理解發生的情況。

-1

所以現在這是真正爲我工作:

if request.headers['Content-Type'] == 'application/json': 
    if not request.json: 
     abort(400) 
    jdata = json.loads(request.data) 

    if not request.json: 
     abort(400) 

    username = jdata.get('username') 
    password = jdata.get('password') 

我也試過張貼JSON與捲曲 - 始終確保有出站字符串這樣的內部密鑰一個'"

'{"username" : "John", "password" : "1234"}' 

Python並不關心他們是一本字典,而是JSON做哪種方式...