需求是一个简单的页面,用户输入要想查询数据的时间(如: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>