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

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

当前回答

在Flask 1.1中,如果你返回一个字典,它会自动转换成JSON。因此,如果make_summary()返回一个字典,则可以

from flask import Flask

app = Flask(__name__)

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

询问是否包含状态码的SO被关闭为此状态码的副本。因此,为了回答这个问题,您可以通过返回(dict, int)形式的元组来包含状态代码。dict被转换为JSON, int将是HTTP状态码。如果没有任何输入,Status默认为200。所以在上面的例子中,代码是200。在下面的示例中,它被更改为201。

from flask import Flask

app = Flask(__name__)

@app.route('/summary')
def summary():
    d = make_summary()
    return d, 201  # 200 is the default

您可以使用检查状态码

curl --request GET "http://127.0.0.1:5000/summary" -w "\ncode: %{http_code}\n\n"

其他回答

在Flask 1.1中,如果你返回一个字典,它会自动转换成JSON。因此,如果make_summary()返回一个字典,则可以

from flask import Flask

app = Flask(__name__)

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

询问是否包含状态码的SO被关闭为此状态码的副本。因此,为了回答这个问题,您可以通过返回(dict, int)形式的元组来包含状态代码。dict被转换为JSON, int将是HTTP状态码。如果没有任何输入,Status默认为200。所以在上面的例子中,代码是200。在下面的示例中,它被更改为201。

from flask import Flask

app = Flask(__name__)

@app.route('/summary')
def summary():
    d = make_summary()
    return d, 201  # 200 is the default

您可以使用检查状态码

curl --request GET "http://127.0.0.1:5000/summary" -w "\ncode: %{http_code}\n\n"

如果是字典,flask可以直接返回(版本1.0.2)

def summary():
    d = make_summary()
    return d, 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)传递。

当使用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'))

要序列化一个对象,使用flask模块中的jsonify来jsonify对象,默认情况下字典会被序列化。另外,如果你处理的是文件,你总是可以使用make_response。