json Flask:点击按钮下载csv文件[复制]

vmjh9lq9  于 2023-04-22  发布在  其他
关注(0)|答案(3)|浏览(101)

此问题已在此处有答案

How to serve static files in Flask(24回答)
Create and download a CSV file from a Flask view(3个答案)
Return JSON response from Flask view(15个答案)
3年前关闭。
我刚刚开始使用Flask/Python。我想实现的是,我在HTML中有一个下载按钮,它调用以下函数:

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

不完整的 flask 代码为:

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

我面临的问题是,我无法找到一种方法来下载这个csv文件或返回它作为一个JSON字符串,所以我可以使用Javascript下载它。有什么想法,我可以发送它作为JSON或通过Flask本身下载它?什么是最好的方法?

yuvru6vn

yuvru6vn1#

以下是一种不使用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)
ddrv8njm

ddrv8njm2#

您可以使用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',
        download_name='Adjacency.csv',
        as_attachment=True
    )

在Flask 2.0之前,download_name被称为attachment_filename

58wvjzkj

58wvjzkj3#

首先,你需要从flask make_response导入,这将生成你的响应并创建变量,比如response。其次,使response.content_type = "text/csv"第三-返回你的响应。

相关问题