Ho una funzione che analizza un file CSV con Pandas e produce un dict con informazioni riassuntive. Voglio restituire i risultati come risposta da una vista Flask. Come posso restituire una risposta JSON?
@app.route("/summary")
def summary():
d = make_summary()
# send it back as json
Passa i dati di riepilogo alla funzione jsonify
, che restituisce una risposta JSON.
from flask import jsonify
@app.route('/summary')
def summary():
d = make_summary()
return jsonify(d)
A partire da Flask 0.11, potete passare qualsiasi tipo JSON-serializzabile, non solo dict, come oggetto di primo livello.
Passa gli argomenti delle parole chiave a flask.jsonify
e saranno emessi come oggetto 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
}
Se avete già un dict, potete passarlo direttamente come jsonify(d)
.
Se volete analizzare un file caricato dall'utente, il quickstart di Flask mostra come ottenere i file dagli utenti e accedervi. Prendi il file da request.files
e passalo alla funzione summary.
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')
Sostituite la chiave 'data'
per request.files
con il nome del file inserito nel vostro modulo HTML.