django + vue导出excel 简介

366 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

0 环境

  • 编辑器:idea,vscode
  • 系统版本:win10
  • python版本:3.9.6
  • vue版本:2.xx

1 吐槽

不得不说相对于java + vue有很多博客资料,但想找个django + vue导出的功能,确实好难好难呀,不符合自己的需求,这里简单分享一下自己导出功能的实现。

2 导出方式选择以及思路

导出方式大致分两种:一种前端做:现在提供相关的库,xlsx,file-saver,还有很多大佬封装好的库,一步到位的那种。第二种呢就是后端做:后端也有相应的读写库,常用读取:xlrd,写:xlwt,以及读写兼备的openpyxl等,xlrd有版本问题,版本号没选对,读取xlsx会报错。我偏后端嘛,前端大致提一下。

1 前端方式

前端大致分为两种:一种呢是直接获取后台的数据,得到后端返回的数据,类型:[[字段],[数据]...[数据]],前端开始创建excel,写入等操作,最终通过保存new Blob(xxx),完成导出功能。这里也有个问题,数据小还好,大的话,相当于我重新获取后端的数据(转化好的),前端获取,在写入,我还不如在后端直接读写,在返回岂不是美哉。

image.png

image.png

第二种呢,有点爬虫的味道,就是定位到表格的位置,抓取相应的节点的数据,获取数据,接下来的操作和上面前端创建excel一种,只是获取数据的渠道不一样而已,但是抓取会把你不需要的字段抓到,比如操作,以及勾选框等,你肯定会说,我可以正则等方式,还有一个问题正常页面都是分页的,只会读到当前页,你肯定会说,我获取总的total,或者增加每页页数,增加了判断标准,乍一看省事了,但一点也不省心也没省事多少。

2 后端

主要我是偏后端的,所以会优先选择后端,而且它离数据库最近,读写一条龙,并且前端也开心嘛,虽然django和vue都需要我写。和前端的数据整合类似,也是头和数据,excel创建都是类似的,只是有个区别,最终的excel会先保存服务器里,前端在读取服务器给excel定的URL,我猜,假如数据量大了,你传给前端突然中断了等情况,是不是要考虑续传或者其他问题,那我不如直接写入到服务器里,你直接根据服务器给的地址,下载得了,正常文件也不太大,而且导出功能使用量用的很少。