萌新提问!:flask ajax 下载服务端文件,请求能成功,但是文件下载不下来,是为什么?

需求是一个简单的页面,用户输入要想查询数据的时间(如:2019-03-31) 然后后端收到数据,从数据库等地方获取数据 处理之后 做成pandas的dataframe,然后pandas的to_excel 生成Excel文件保存在服务端中,用户点击下载按钮 下载文件。
现在遇到的问题是:
请求能成功,状态码200 但是无法下载文件。
跪求大佬!!
这是后端代码

@app.route('/')
def html():

    return render_template('download.html')


@app.route('/download', methods=['POST'])  
def downloads(time):
    # 获取时间数据
    time = request.args.get()
    print(time)
    # filename=StringIO()
    # time = request.get_json()["time"]
    print(time)
    filename = "{}.xlsx".format(time)
    writer = pd.ExcelWriter(filename)
        # df3,df2,df4 是通过时间从数据库获取的数据 转dataframe
    df3,df2,df4 = get_excel(time) 

    gc = GetCount(time)
        # hb_df,sc_df  同上 获取数据转dataframe
    hb_df = gc.get_hb_uv()
    sc_df = gc.get_sc_uv()
        df3.to_excel(writer,sheet_name="1-{}".format(time), index=False)
    df2.to_excel(writer,sheet_name="2-{}".format(time), index=False)
    df4.to_excel(writer,sheet_name="3-{}".format(time), index=False)
    hb_df.to_excel(writer,sheet_name="4-{}".format(time), index=False)
    sc_df.to_excel(writer,sheet_name="5-{}".format(time), index=False)
    writer.save()
    if os.path.isfile(os.path.join(basedir, filename)):
        print(os.path.join(basedir, filename))
        response = make_response(send_from_directory(basedir, filename, as_attachment=True))
        response.headers["Content-Disposition"] = "attachment; filename={}".format(filename)

        return response

这是前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>数据下载</title>
    <style>
        .main {
            margin: 100px auto;
            width: 500px;
            border: 1px solid #ddd;
            border-radius: 5px;
            padding: 100px 50px; 
        }
    </style>
</head>
<body>
    <div class="main">
        <h2>数据下载</h2>
        <span>请输入要查询的时间:</span><input type="text" placeholder="时间格式为:2019-01-01" id="time">
        <br>
        <button type="button" onclick="download()">下载数据</button>
    </div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
    function download(){
        var params = {
            time: $('#time').val()
        };
        if($('#time').val() === '') {
            alert('请输入时间')
        } else {
            $.ajax({
                type: 'post',
                url: '/download',
                data: JSON.stringify(params),
                contentType: "application/json",
                datatype: 'json',
                success: function(data){

                },
                error: function(err){
                    alert('出错了:' + err)
                }
            })
        }
    }
</script>
</html>
查看全部
weixin_42689946
EtVzzz
2019/04/08 10:44
  • python
  • flask
  • ajax
  • jquery
  • 点赞
  • 收藏
  • 回答
    私信

1个回复