Frasco: descargue un archivo csv haciendo clic en un botón

Acabo de empezar con Flask / Python. Lo que quiero lograr es que tengo un botón de descarga en mi HTML y llama a la siguiente función:

function downloadPlotCSV() { $.ajax({ url: "/getPlotCSV", type: "post", success: function(data) { dataPlot = JSON.parse(data); console.log(dataPlot); } }); } 

El código del matraz incompleto es:

 @app.route('/getPlotCSV', methods = ['POST']) def plotCSV(): data = open("outputs/Adjacency.csv") 

El problema al que me estoy enfrentando es que no puedo encontrar una manera de descargar este archivo csv o devolverlo como una cadena JSON, por lo que puedo descargarlo usando Javascript. ¿Alguna idea de cómo puedo enviarlo como JSON o tal vez descargarlo a través del propio Flask? ¿Cuál es la mejor manera?

Related of "Frasco: descargue un archivo csv haciendo clic en un botón"

Aquí hay una forma de descargar un archivo CSV sin Javascript:

 #!/usr/bin/python from flask import Flask, Response app = Flask(__name__) @app.route("/") def hello(): return '''  Hello. Click me.  ''' @app.route("https://stackoverflow.com/getPlotCSV") def getPlotCSV(): # with open("outputs/Adjacency.csv") as fp: # csv = fp.read() csv = '1,2,3\n4,5,6\n' return Response( csv, mimetype="text/csv", headers={"Content-disposition": "attachment; filename=myplot.csv"}) app.run(debug=True) 

Puede usar flask.send_file() para enviar un archivo estático:

 from flask import send_file @app.route('https://stackoverflow.com/getPlotCSV') # this is a job for GET, not POST def plot_csv(): return send_file('outputs/Adjacency.csv', mimetype='text/csv', attachment_filename='Adjacency.csv', as_attachment=True) 

En primer lugar, debe importar desde el matraz make_response , que generará su respuesta y creará una variable, algo así como la response . En segundo lugar, haga response.content_type = "text/csv" En tercer lugar, devuelva su respuesta.