Return JSON response from Flask view
我有一个功能,用Pandas分析CSV文件,并生成一个包含摘要信息的dict。 我想将结果作为Flask视图的响应返回。 如何返回JSON响应?
1 2 3 4 | @app.route("/summary") def summary(): d = make_summary() # send it back as json |
将摘要数据传递给
1 2 3 4 5 6 | from flask import jsonify @app.route('/summary') def summary(): d = make_summary() return jsonify(d) |
从Flask 0.11开始,您可以将任何JSON可序列化类型(不仅仅是dict)作为顶级对象传递。
1 2 3 4 5 6 7 8 9 10 11 | from flask import json @app.route('/summary') def summary(): data = make_summary() response = app.response_class( response=json.dumps(data), status=200, mimetype='application/json' ) return response |
将关键字参数传递给
1 2 3 4 5 6 7 | @app.route('/_get_current_user') def get_current_user(): return jsonify( username=g.user.username, email=g.user.email, id=g.user.id ) |
1 2 3 4 5 | { "username":"admin", "email":"admin@localhost", "id": 42 } |
如果您已经有一个dict,可以直接将其传递为
如果您出于某种原因不想使用
1 2 3 4 5 6 7 8 9 10 | from flask import json @app.route('/summary') def summary(): data = make_summary() response = app.response_class( response=json.dumps(data), mimetype='application/json' ) return response |
如果要分析用户上载的文件,Flask快速入门将显示如何从用户获取文件并访问它们。从
1 2 3 4 5 6 7 8 9 10 11 12 13 | from flask import request, jsonify from werkzeug import secure_filename @app.route('/summary', methods=['GET', 'POST']) def summary(): if request.method == 'POST': csv = request.files['data'] return jsonify( summary=make_summary(csv), csv_name=secure_filename(csv.filename) ) return render_template('submit_data.html') |
将
虽然
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def return_json(f): @functools.wraps(f) def inner(*a, **k): return json.dumps(f(*a, **k)) return inner @app.route('/test/') @return_json def test(arg): if arg == 'list': return [1, 2, 3] elif arg == 'dict': return {'a': 1, 'b': 2} elif arg == 'bool': return True return 'non of them' |
要返回JSON响应并设置状态代码,您可以使用
1 2 3 4 5 6 | from flask import jsonify, make_response @app.route('/summary') def summary(): d = make_summary() return make_response(jsonify(d), 200) |
Flask问题跟踪器中此评论的灵感。
在Flask 0.11之前,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @app.route('/get_records') def get_records(): results = [ { "rec_create_date":"12 Jun 2016", "rec_dietary_info":"nothing", "rec_dob":"01 Apr 1988", "rec_first_name":"New", "rec_last_name":"Guy", }, { "rec_create_date":"1 Apr 2016", "rec_dietary_info":"Nut allergy", "rec_dob":"01 Feb 1988", "rec_first_name":"Old", "rec_last_name":"Guy", }, ] return jsonify(results=list) |