如何使用Flask从json数据返回csv文件?
我正在尝试向我的flask应用程序发送json数据,并让它返回CSV文件。我的ajax请求通过POST请求向视图发送JSON数据,然后视图应该返回csv文件。但是,它无法在浏览器中将csv文件作为下载返回。我不知道如何让它工作,或者它是否可能。谢谢如何使用Flask从json数据返回csv文件?,json,python-3.x,flask,export-to-csv,Json,Python 3.x,Flask,Export To Csv,我正在尝试向我的flask应用程序发送json数据,并让它返回CSV文件。我的ajax请求通过POST请求向视图发送JSON数据,然后视图应该返回csv文件。但是,它无法在浏览器中将csv文件作为下载返回。我不知道如何让它工作,或者它是否可能。谢谢 // AJAX - Send data over to python and return csv $("#export").click( function(){ $.ajax({
// AJAX - Send data over to python and return csv
$("#export").click(
function(){
$.ajax({
url: "/dbCSV",
type: "POST",
contentType: 'application/json;charset=UTF-8',
dataType:"json",
data: JSON.stringify(datam)
});
event.preventDefault();
}
);
将csv文件保存在静态路径中,然后使用该静态路径的csv URL从浏览器获取下载形式的csv文件。我建议使用
发送文件(…)
和BytesIO
(文件流)对象:
从io导入字节io
从flask导入发送\u文件
...
响应\u stream=BytesIO(data.to\u csv().encode())
返回发送文件(
响应流,
mimetype=“text/csv”,
附件_filename=“export.csv”,
)
请记住,在使用AJAX发送POST请求时,您将无法打开下载提示。相反,您将只接收作为AJAX响应的文件。要解决此问题,您必须查看以下问题:
也许你的代码已经在运行了,这就是你的问题所在——我看不出来。我终于明白了。基本上,我可以使用
flask
库中提供的session
对象存储用户输入。这允许不同的函数访问它,而不必担心创建全局变量或通过函数或对象传递它们
注意1-如果必须保存的用户数据量很大,那么在这种情况下,使用
Redis
或其他类型的内存数据存储将是更好的选择。当然这必须添加到函数中,否则return
语句在这里没有意义;)我已经试过了,但它仍然不允许我下载文件。我甚至添加了window.location=“/dbCSV”代码>到ajax调用的成功部分,它仍然不起作用。您是否可以调试您是否确实发送了响应(例如,通过在函数中添加一些打印)?另外,尝试添加一个不需要任何参数的GET端点,只返回CSV,例如pd.DataFrame(numpy.array([1,2])
,然后,您可以使用浏览器导航到相应的URL来测试它。我尝试在dataframe和send_file片段周围添加一组打印语句,JSON数据转换为dataframe然后转换为CSV文件的部分工作正常。无论出于什么原因,我仍然没有看到csv下载。我还尝试使用一个不太好用的
。
@analyzers.route("/dbCSV", methods=["GET","POST"])
def dbCSV():
if request.method=="POST":
data = pd.DataFrame(request.get_json())
resp = make_response(data.to_csv())
resp.headers["Content-Disposition"] = "attachment; filename=export.csv"
resp.headers["Content-Type"] = "text/csv"
return resp
return jsonify({"msg":"Could not generate CSV File"})