简体   繁体   English

Python Flask Restful API

[英]Python Flask Restful API

Part of my Flask code: 我的Flask代码的一部分:

@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)

Script to post a new database entry: 发布新数据库条目的脚本:

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))

I keep getting json decoder TypeError problems, eg 我不断收到json解码器TypeError问题,例如

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 -

I have tried several things, incl. 我尝试了几件事,包括。 posting strings. 发布字符串。 Any clue what is wrong with the way I post a dictionary? 任何线索我发布字典的方式有什么问题吗? The problem appears to be at the point of body = request.get_json(). 问题似乎出在正文= request.get_json()的位置。 I don't think I am picking up any data... 我认为我没有收到任何数据...

You don't need to loads request message to get dict format. 您无需loads请求消息即可获取dict格式。 Information stored in body variable is already in dict form. 存储在body变量中的信息已采用字典形式。 Simply doing the following should remove the error: 只需执行以下操作即可消除该错误:

@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 )

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

get_json is probably returning a dict already, so you don't need to call json.loads(body) (this is what most likely causes the TypeError ). get_json可能已经返回了dict,所以您不需要调用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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM