我有一个功能,分析一个CSV文件与熊猫和产生一个词典的摘要信息。我想从Flask视图返回结果作为响应。如何返回JSON响应?

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

当前回答

1.1瓶。x支持在不调用jsonify的情况下返回JSON字典。如果你想返回dict以外的东西,你仍然需要调用jsonify。

@app.route("/")
def index():
    return {
        "api_stuff": "values",
    }

等于

@app.route("/")
def index():
    return jsonify({
        "api_stuff": "values",
    })

查看添加了这个的拉请求:https://github.com/pallets/flask/pull/3111

其他回答

1.1瓶。x支持在不调用jsonify的情况下返回JSON字典。如果你想返回dict以外的东西,你仍然需要调用jsonify。

@app.route("/")
def index():
    return {
        "api_stuff": "values",
    }

等于

@app.route("/")
def index():
    return jsonify({
        "api_stuff": "values",
    })

查看添加了这个的拉请求:https://github.com/pallets/flask/pull/3111

我喜欢这样:

    @app.route("/summary")
    def summary():
        responseBody = { "message": "bla bla bla", "summary": make_summary() }
        return make_response(jsonify(responseBody), 200)

向flask传递关键字参数。jsonify,它们将作为JSON对象输出。

@app.route('/_get_current_user')
def get_current_user():
    return jsonify(
        username=g.user.username,
        email=g.user.email,
        id=g.user.id
    )
{
    "username": "admin",
    "email": "admin@localhost",
    "id": 42
}

如果你已经有了一个字典,你可以直接把它作为jsonify(d)传递。

视图可以直接返回Python字典或列表,Flask会自动调用jsonify。

@app.route("/summary")
def summary():
    d = make_summary()
    return d

对于较旧的Flask版本,或者要返回不同的json序列化对象,请导入并使用jsonify。

from flask import jsonify

@app.route("/summary")
def summary():
    d = make_summary()
    return jsonify(d)

当使用Flask的基于类的视图时,答案是一样的。

from flask import Flask, request, jsonify
from flask.views import MethodView

app = Flask(__name__)

class Summary(MethodView):
    def get(self):
        d = make_summary()
        return jsonify(d)

app.add_url_rule('/summary/', view_func=Summary.as_view('summary'))