Django学习之django配置vue完成数据库数据的excel形式的文件下载
将数据库中的数据写入excel文件并下载的流程梳理
后端实现
后台url.py
urlpatterns = [ .... re_path('^host/host_excel/', views.HostExcelView.as_view()), ]
后台视图views.py
class HostExcelView(APIView): # 下载host数据excel文件 def get(self,request): #1 读取数据库数据 all_host_data = models.Host.objects.all().values('id', 'category', 'hostname', 'ip_addr', 'port', 'username','desc', 'evrironments') print(all_host_data) # 2 写入excel并保存 # 关于excel的操作,参考我的博客 # 创建excel ws = xlwt.Workbook(encoding='utf-8') # 创建工作簿 st = ws.add_sheet('主机数据') # 写标题行 st.write(0, 0, 'id') st.write(0, 1, 'category') st.write(0, 2, 'hostname') st.write(0, 3, 'ip_addr') st.write(0, 4, 'port') st.write(0, 5, 'username') st.write(0, 6, 'desc') st.write(0, 7, 'evrironments') # 写入数据,从第一行开始 excel_row = 1 for host_obj in all_host_data: st.write(excel_row, 0, host_obj.get('id')) st.write(excel_row, 1, host_obj.get('category')) st.write(excel_row, 2, host_obj.get('hostname')) st.write(excel_row, 3, host_obj.get('ip_addr')) st.write(excel_row, 4, host_obj.get('port')) st.write(excel_row, 5, host_obj.get('username')) st.write(excel_row, 6, host_obj.get('desc')) st.write(excel_row, 7, host_obj.get('evrironments')) excel_row += 1 # sio = BytesIO() # 将数据写入io数据流,不用在本地生成excel文件,不然效率就低了 sio = BytesIO() ws.save(sio) sio.seek(0) # print(sio.getvalue()) #3 将excel数据响应回客户端 response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel') # response['Content-Disposition'] = 'attachment; filename=xx.xls' # 文件名称中文设置 from django.utils.encoding import escape_uri_path response['Content-Disposition'] = 'attachment; filename={}'.format(escape_uri_path('主机列表数据.xls')) response.write(sio.getvalue()) #必须要给response写入一下数据,不然不生效 return response
前端vue实现
其实不管是不是vue,都可以,因为就是一个a标签就能搞定
<a style="color:#fff;" href="http://api.hippo.com:8000/host/host_excel/"> 导出主机列表数据</a> 注意:href属性的值,是你要访问的后台路径