www.cnblogs.com/ruiyqinrui

开源、架构、Linux C/C++/python AI BI 运维开发自动化运维。 春风桃李花 秋雨梧桐叶。“力尽不知热 但惜夏日长”。夏不惜,秋不获。@ruiY--秦瑞

python爬虫,C编程,嵌入式开发.hadoop大数据,桉树,onenebula云计算架构.linux运维及驱动开发.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  2912 随笔 :: 9 文章 :: 51 评论 :: 185万 阅读

  最近在写主机管理并支持远程命令执行,返回结果以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否则报错。

效果:

posted on   秦瑞It行程实录  阅读(145)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2017-06-22 sql
2016-06-22 gitlab gerrit jenkins CI/CD环境集成
2016-06-22 TortoiseGit状态图标不能正常显示的解决办法
www.cnblogs.com/ruiyqinrui
点击右上角即可分享
微信分享提示