Flask: загрузите файл csv при нажатии кнопки
Я только начал работать с Flask/Python. Я хочу добиться того, что у меня есть кнопка загрузки в моем HTML, и она вызывает следующую функцию:
function downloadPlotCSV() {
$.ajax({
url: "/getPlotCSV",
type: "post",
success: function(data) {
dataPlot = JSON.parse(data);
console.log(dataPlot);
}
});
}
Неполный код колбы:
@app.route('/getPlotCSV', methods = ['POST'])
def plotCSV():
data = open("outputs/Adjacency.csv")
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ загрузить этот файл csv или вернуть его как строку JSON, чтобы я мог загрузить его с помощью Javascript. Любая идея, как я могу отправить его как JSON или, возможно, загрузить его через Flask? Какой лучший способ?
Ответы
Ответ 1
Вот один из способов загрузки CSV файла без Javascript:
#!/usr/bin/python
from flask import Flask, Response
app = Flask(__name__)
@app.route("/")
def hello():
return '''
<html><body>
Hello. <a href="/getPlotCSV">Click me.</a>
</body></html>
'''
@app.route("/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)
Ответ 2
Вы можете использовать flask.send_file()
для отправки статического файла:
from flask import send_file
@app.route('/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)
Ответ 3
Сначала вам нужно импортировать из фляги make_response
, которая будет генерировать ваш ответ и создать переменную, что-то вроде response
.
Во-вторых, сделайте response.content_type = "text/csv"
В-третьих - верните ответ.