美文网首页
Django 导出 csv

Django 导出 csv

作者: alue | 来源:发表于2022-11-07 18:46 被阅读0次

需求

用户点击导出按钮,自动下载相关数据,然后用 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);  
};

相关文章

网友评论

      本文标题:Django 导出 csv

      本文链接:https://www.haomeiwen.com/subject/npcitdtx.html