需求
用户点击导出按钮,自动下载相关数据,然后用 excel 打开查看。
后端
利用csv库实现,值得注意的是 response.write(u'\ufeff'.encode('utf8')) 。这里手动加入BOM头,不然excel打开中文会出现乱码。具体原因可以参看之前的文章 Quasar 导出的csv中文乱码。
def csv_export(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="records.csv"'
response.write(u'\ufeff'.encode('utf8')) # BOM
writer = csv.writer(response)
writer.writerow(export_headers)
for row in queryset.values_list(*export_values):
writer.writerow(row)
return response
前端
用 axios 发送用户请求下载的指令,并在内存中生成下载链接,自动完成下载处理。相关代码记录如下:
const exportClicked = async () => {
const data = await api({
url: URLs.EXPORT_CSV,
method: "GET",
params: {
...formData.value,
},
responseType: "blob",
});
const href = URL.createObjectURL(data);
// create "a" HTML element with href to file & click
const link = document.createElement("a");
link.href = href;
link.setAttribute("download", "records.csv"); //or any other extension
document.body.appendChild(link);
link.click();
// clean up "a" element & remove ObjectURL
document.body.removeChild(link);
URL.revokeObjectURL(href);
};








网友评论