667 Stimmen

Rückgabe der JSON-Antwort aus der Flask-Ansicht

Ich habe eine Funktion, die eine CSV-Datei mit Pandas analysiert und ein Diktat mit zusammenfassenden Informationen erzeugt. Ich möchte die Ergebnisse als Antwort aus einer Flask-Ansicht zurückgeben. Wie kann ich eine JSON-Antwort zurückgeben?

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

1001voto

codegeek Punkte 31458

Eine Ansicht kann direkt ein Python-Dict oder eine Liste zurückgeben und Flask ruft jsonify automatisch.

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

Für ältere Flask-Versionen, oder um ein anderes JSON-serialisierbares Objekt zurückzugeben, importieren und verwenden Sie jsonify .

from flask import jsonify

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

289voto

scls Punkte 14871

jsonify serialisiert die Daten, die Sie übergeben, in JSON. Wenn Sie die Daten selbst serialisieren wollen, tun Sie das jsonify tut, indem er eine Antwort mit status=200 y mimetype='application/json' .

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

159voto

zengr Punkte 37400

Übergeben Sie Schlüsselwortargumente an flask.jsonify und sie werden als JSON-Objekt ausgegeben.

@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
}

Wenn Sie bereits ein Diktat haben, können Sie es direkt als jsonify(d) .

52voto

Anthony Awuley Punkte 2805

Wenn Sie nicht möchten, dass jsonify aus irgendeinem Grund können Sie das, was es tut, manuell tun. aufrufen flask.json.dumps um JSON-Daten zu erstellen, und geben dann eine Antwort mit der application/json Inhaltstyp.

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.json unterscheidet sich von dem eingebauten json Modul. Es verwendet das schnellere simplejson Modul, falls verfügbar, und ermöglicht verschiedene Integrationen mit Ihrer Flask-App.

38voto

rouble Punkte 13722

Um eine JSON-Antwort zurückzugeben und einen Statuscode festzulegen, können Sie Folgendes verwenden make_response :

from flask import jsonify, make_response

@app.route('/summary')
def summary():
    d = make_summary()
    return make_response(jsonify(d), 200)

Inspiration aus diesem Kommentar im Flask Issue Tracker.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X