2016-08-16 61 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更改为其他路径有所帮助。 –