Flask:单击按钮下载csv文件

时间:2015-05-04 07:39:12

标签: javascript python json csv flask

我刚开始使用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本身下载它吗?什么是最好的方式?

3 个答案:

答案 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" 第三 - 回复你的回复。