How to get POSTed json in Flask?
我正在尝试使用flask构建一个简单的API,现在我想在其中阅读一些已发布的JSON。我使用postman chrome扩展来完成post,而json i post只是
1 2 3 4 5 | @app.route('/api/add_message/<uuid>', methods=['GET', 'POST']) def add_message(uuid): content = request.json print content return uuid |
在浏览器上,它正确地返回了我放在get中的uuid,但是在控制台上,它只打印出
首先,
您需要将请求内容类型设置为
This will contain the parsed JSON data if the mimetype indicates JSON (application/json, see
is_json() ), otherwise it will beNone .
通过设置
请注意,如果此时引发异常(可能导致400个错误的请求响应),则JSON数据无效。它在某种程度上是格式错误的;您可能需要用JSON验证器检查它。
下面是如何从Python客户机发送JSON的完整代码,供参考:
1 2 3 4 | import requests res = requests.post('http://localhost:5000/api/add_message/1234', json={"mytext":"lalala"}) if res.ok: print res.json() |
"json="input将自动设置内容类型,如下所述:使用python请求发布json
上面的客户机将使用这个服务器端代码:
1 2 3 4 5 6 7 8 9 10 11 | from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/api/add_message/<uuid>', methods=['GET', 'POST']) def add_message(uuid): content = request.json print content['mytext'] return jsonify({"uuid":uuid}) if __name__ == '__main__': app.run(host= '0.0.0.0',debug=True) |
这就是我应该做的
1 2 3 4 5 | @app.route('/api/add_message/<uuid>', methods=['GET', 'POST']) def add_message(uuid): content = request.get_json(silent=True) # print(content) # Do your processing return uuid |
设置了
设置
见烧瓶文件。
我强烈建议离开
希望这有帮助!
此解决方案有效:
1 2 3 4 5 6 7 8 | from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/hello', methods=['POST']) def hello(): return jsonify(request.json) |