Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将CSV文件下载到客户端_Python_Csv_Flask_Download - Fatal编程技术网

Python 将CSV文件下载到客户端

Python 将CSV文件下载到客户端,python,csv,flask,download,Python,Csv,Flask,Download,我有以下路线: @app.route('/download/', methods=['GET']) def download(): output_filename = request.args.get('output_filename') data = dict(foos=[1,2,3,3,2,1], bars=[7,7,7,7,7,7]) df = pd.DataFrame(data) result = df.to_csv(index=False) re

我有以下路线:

@app.route('/download/', methods=['GET'])
def download():
    output_filename = request.args.get('output_filename')
    data = dict(foos=[1,2,3,3,2,1], bars=[7,7,7,7,7,7])
    df = pd.DataFrame(data)
    result = df.to_csv(index=False)
    response = make_response(result)
    response.headers['Content-Disposition'] = f'attachment; filename={output_filename}'
    response.headers['Cache-Control'] = 'must-revalidate'
    response.headers['Pragma'] = 'must-revalidate'
    response.headers['Content-type'] = 'application/csv'
    return response
我用AJAX调用它,如下所示:

function download(data, handler = null) {
  let data = {output_filename: "foo.csv"};
  let url = "/download/";
  $.ajax({
    type: "GET",
    url: url,
    data: data,
    success: function(data) {
      console.log('success');
    },
  });
}

但是,客户端没有显示任何内容。我在这里遗漏了什么吗?

我比ajax更熟悉node(我在nodejs中遇到了与stackoverflow相同的问题,我在这里修复了该问题),但这可能会有所帮助:

$.ajax({
    async: false,

我比ajax更熟悉node(我在nodejs中遇到了相同的问题,我在stackoverflow上解决了这个问题),但这可能会有所帮助:

$.ajax({
    async: false,

from

if def download():这只是一个返回的数据,你得到了什么吗?是的,我觉得我在这里有点傻<代码>成功:…返回CSV数据,因此思考可能会得到答案…我对您的问题投了更高的票,因为我认为这是一个很棒的问题。很多文档似乎忘记了在函数完成之前您可能需要取回数据的情况。@suppressionlayer我在
success
闭包中将数据作为CSV字符串获取,但我想知道,如果您希望浏览器解释内容处置头等,为什么它不将其写入文件将get请求直接发送到服务器,而不是ajax。用下载url创建html元素并触发点击事件。如果def download():只是返回数据,你得到什么了吗?是的,我觉得我有点不对劲<代码>成功:…返回CSV数据,因此思考可能会得到答案…我对您的问题投了更高的票,因为我认为这是一个很棒的问题。很多文档似乎忘记了在函数完成之前您可能需要取回数据的情况。@suppressionlayer我在
success
闭包中将数据作为CSV字符串获取,但我想知道,如果您希望浏览器解释内容处置头等,为什么它不将其写入文件将get请求直接发送到服务器,而不是ajax。使用下载url创建html元素,并在其上触发单击事件。