我刚开始使用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本身下载它吗?什么是最好的方式?
答案 0 :(得分:45)
以下是一种无需Javascript下载CSV文件的方法:
#!/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)
答案 1 :(得分:28)
您可以使用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)
答案 2 :(得分:-2)
首先,您需要从烧瓶make_response
导入,这将生成您的响应并创建变量,例如response
。
其次,制作response.content_type = "text/csv"
第三 - 回复你的回复。