django xlwt excel数据导出

  最近在写主机管理并支持远程命令执行,返回结果以execl表格形式显示,涉及到execl表格的下载问题。网上大部分都是python2的部分的代码,我运行的环境是python3下,

经过测试和修改,该了部分代码。

首先我们先了解几个概念:

1、content_type='application/vnd.ms-excel':该参数是告诉浏览器,传输的文件是什么类型文件。要以什么方式进行处理。

2、Content-Disposition=‘attachment;filename=user.xls':Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名。

django版本:Django 1.10 python版本:Python 3.5.1

创建简单的django框架的网站,进行测试:

前端html文件:

复制代码
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 
 9 <div>
10     <p><a href="/output">导出csv</a></p>
11 </div>
12 </body>
13 </html>
复制代码

django url:

1 urlpatterns = [
2     url(r'^admin/', admin.site.urls),
3     url(r'^output/', views.output),
4     url(r'^down/', views.down),
5 
6 ]

视图代码:

复制代码
 1 from django.shortcuts import render,HttpResponse
 2 import xlwt
 3 from io import StringIO,BytesIO
 4 # Create your views here.
 5 # def output(reuqest):
 6 def output(request):
 7     response = HttpResponse(content_type='application/vnd.ms-excel')
 8     response['Content-Disposition'] = 'attachment;filename=user.xls'
 9     wb = xlwt.Workbook(encoding = 'utf-8')
10     sheet = wb.add_sheet(u'人员表单')
11     #1st line
12     sheet.write(0,0, '姓名')
13     sheet.write(0,1, '英文名')
14     sheet.write(0,2, '职位')
15     sheet.write(0,3, '公司电话')
16     sheet.write(0,4, '手机')
17     sheet.write(0,5, 'QQ')
18     sheet.write(0,6, 'MSN')
19     sheet.write(0,7, 'Email')
20     sheet.write(0,8, '办公地点')
21     sheet.write(0,9, '部门')
22     output = BytesIO()
23     wb.save(output)
24     output.seek(0)
25     response.write(output.getvalue())
26     return response
27 def down(request):
28     return render(request,'download.html')
复制代码

由于是测试,modle就没建表,只是简单做个测试。

需要注意:

1:在HttpResponse中,只有content_type而不是minetype。可以看源码。在低版本是minetype,在最新版本django运行会报错typeerror。

2:在python3中以bytes形式传输,所以需要用IO模块中BytesIO而不是StringIO否则报错。

效果:

原文地址:https://www.cnblogs.com/ruiy/p/14916978.html