2012-11-13 40 views
3
JSON錯誤

我想如下添加到API一個DELETE方法:嘗試除瓶

if request.method == 'DELETE': 

    if request.headers['Content-Type'] == 'application/json': 

     try: 
      data = json.loads(request.data) 
      data_id = data['id'] 
      db.execute('DELETE FROM places WHERE id=' + data_id) 
      db.commit() 
      resp = Response({"Delete Success!"}, status=200, mimetype='application/json') 
      return resp 

     except (ValueError, KeyError, TypeError): 
      resp = Response({"JSON Format Error."}, status=400, mimetype='application/json') 
      return resp 

我傳遞了以下捲曲:

curl -H "Content-type: applicaiton/json" -X DELETE http://localhost:5000/location -d '{"id":3}' 

除了塊的嘗試失敗因爲某些原因。我無法檢測到問題所在。任何想法如何我可以調試呢?

+0

您是否看到異常被提出?另外,如果沒有id爲'data_id'的項,你可能會考慮返回404而不是400 – Andbdrew

+0

它返回錯誤400,因此我相信會引發一個異常。 – darksky

+0

或'contentType'? –

回答

0

如果更改

except (ValueError, KeyError, TypeError): 
    resp = Response({"JSON Format Error."}, status=400, mimetype='application/json') 
    return resp 

except (ValueError, KeyError, TypeError) as error: 
    print error 
    resp = Response({"JSON Format Error."}, status=400, mimetype='application/json') 
    return resp 

,你將能夠看到您的錯誤。

更新:我很高興你發現你的錯誤!我想大多數模塊包裝數據庫連接,可以這樣做:

db.execute('SELECT * FROM awesome_table WHERE id=%s', data_id) 

,他們通常會提供一些基本的SQL注入防護。

+0

謝謝!有一件事情可以在以後看到:如果我正在開發一個僅限JSON的API,則Flask中的print不會真正將其打印出來。我用return repr(error)來查找我的錯誤。我的錯誤是在db.execute中,連接一個str和int對象。 – darksky