web-dev-qa-db-de.com

Erzwingen von application / json MIME-Typ in einer Ansicht (Flask)

Ich kann nicht herausfinden, wie ich den MIME-Typ application/json Für eine Ansicht in Flask erzwingen kann. Hier ist eine einfache Ansicht, die ich zu Demonstrationszwecken zusammengestellt habe:

@app.route("/")
def testView():
    ret = '{"data": "JSON string example"}'
    return ret

Die JSON-Zeichenfolge (in der Variablen ret enthalten) wird von einer anderen Stelle gesammelt (mit stdout von einem anderen Programm mit subprocess ), daher kann ich jsonify wird mit Flask geliefert.

Ich habe mir die "Returning Json" Documentation und this Stackoverflow-Frage angesehen, aber ich hatte bisher noch kein Glück. Ich habe mich jetzt schon eine Weile umgesehen und werde weiter suchen, aber ich dachte, ich würde hier nachfragen, nur für den Fall, dass jemand darauf gestoßen ist.

Vielen Dank.


Siehe Antwort unten

Die Lösung:

@app.route("/")
def testView():
    ret = '{"data": "JSON string example"}'

    resp = Response(response=ret,
                    status=200,
                    mimetype="application/json")

    return resp

Ich fand diese Website nützlich: Implementierung einer RESTful-Web-API mit Python & Flask

36
JayQuerie.com

Wie soulseekah bemerkt, ist make_response in diesem Fall wahrscheinlich eine bessere Option. Legen Sie dann die Mimetype-Eigenschaft fest.

r = make_response( data )
r.mimetype = 'application/json'
return r
17
Adam Baxter

Wenn Sie Sie verwenden

from flask import jsonify

und dann in deinem Code

return jsonify(somedict)

dann setzt jsonify () den MIME-Typ automatisch auf 'application/json'

Bearbeiten:

Dies wurde früher als Risiko eingestuft, aber nicht mehr, und Flask hat auch seine Empfehlung aktualisiert: "ECMAScript 5 hat diese Sicherheitsanfälligkeit geschlossen, sodass nur extrem alte Browser verwendet werden "http://flask.pocoo.org). Alle diese Browser haben andere schwerwiegendere Sicherheitslücken, daher wurde dieses Verhalten geändert und jsonify () unterstützt jetzt das Serialisieren von Arrays." /docs/1.0/security/#json-security

37
Prof. Falken