2016-08-16 65 views
1

我的瓶代碼部分:Python的瓶RESTful的API

@app.route('/api/post', methods=['POST']) 
def post(): 
    body = request.get_json() 
    json_body = json.loads(body) 
    new_id = mongo.db.Projects.insert(json_body) 
    return str(new_id) 

腳本來發布新的數據庫條目:

payload = { 'ProjectName' : 'KdB Test Project' } 
headers = {'Content-type': 'application/json', 'Accept': 'application/json'} 
r = requests.post('http://localhost:5000/api/post', headers=headers, data=json.dumps(payload)) 

我不斷收到JSON解碼器類型錯誤的問題,例如

TypeError: expected string or buffer 
2016-08-16 15:19:31,388 - werkzeug - INFO - 127.0.0.1 - - [16/Aug/2016 15:19:31] "POST /api/post HTTP/1.1" 500 - 

我已經嘗試了幾件事情,發佈字符串。任何線索我發佈字典的方式有什麼問題? 這個問題似乎是在body = request.get_json()。我不認爲我正在採集任何數據...

回答

4

您不需要loads請求消息以獲取字典格式。存儲在body變量中的信息已經以字典的形式存在。簡單地做下面應該刪除錯誤:

@app.route('/api/post', methods=['POST']) 
def post(): 
    body = request.get_json() 
    # json_body = json.loads(body) 
    new_id = mongo.db.Projects.insert(body) 
    return str(new_id) 
0

http://flask.pocoo.org/docs/0.11/api/#flask.Request.get_json

get_json可能是返回的字典了,所以你不需要調用json.loads(body)(這是最有可能導致TypeError)。

@app.route('/api/post', methods=['POST']) 
def post(): 
    json_body = request.get_json() 
    new_id = mongo.db.Projects.insert(json_body) 
    return str(new_id) 
+0

謝謝,朋友。不幸的是,這並沒有解決我的問題。我收到以下錯誤: –

+0

仍然出現該錯誤:文件「c:\ Python27 \ Lib \ json \ __ init__.py」,第338行,加載中 return _default_decoder.decode(s) 文件「c:\ Python27 \ Lib \ json \ decoder.py「,行365解碼 obj,end = self.raw_decode(s,idx = _w(s,0).end())TypeError:期望的字符串或緩衝區 –

+0

感謝您的幫助。問題解決了。重新啓動系統和/或將@ app.route更改爲其他路徑有所幫助。 –