python return make_response - FlaskビューからJSONレスポンスを返します





4 Answers

jsonifyは、JSONに渡すデータをjsonify化します。 データを自分でシリアル化する場合は、 status=200mimetype='application/json'応答をjsonifyして、 jsonify行いstatus=200

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
http codes headers

私はパンダとのCSVファイルを分析し、要約情報付きの辞書を作成する機能を持っています。 私はFlaskビューからの応答として結果を返したいと思います。 JSONレスポンスを返すにはどうすればよいですか?

@app.route("/summary")
def summary():
    d = make_summary()
    # send it back as json



ユーザーがアップロードしたファイルを分析する場合は、Flask quickstartユーザーからファイルを取得してアクセスする方法を示します。 request.filesからファイルを取得し、サマリー関数に渡します。

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

request.files'data'キーをHTMLフォームに入力したファイルの名前に置き換えます。




ビュー関数からの戻り値をJSON応答に変換するデコレータを記述することができます。

def return_json(view):
    @functools.wraps(view)
    def wrapped_view(**values):
        return jsonify(view(**values))
    return wrapped_view


@app.route('/test/<arg>')
@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'






Related