python控制浏览器导出数据_Django导出数据为Excel,调用浏览器下载

1. 环境

Django (2.1.10) + Python3.6 + xlwt (1.3.0)

操作系统使用的为:Windows 7

2. 接口代码

defnow_export(request):

data_list= CIP.objects.all() #获取数据的查询集

if notdata_list:return HttpResponse(json.dumps({"state": "1", "msg": "查无数据,导出失败"}), content_type="application/json")

ws= Workbook(encoding='utf-8') #设置Excel为UTF-8的编码格式

w = ws.add_sheet(u"正在清洗的CIP报表") #设置sheet名称

w.write(0, 0, "id")

w.write(0,1, u"清洗线路")

w.write(0,2, u"操作者")

w.write(0,3, u"清洗目标")

w.write(0,4, u"清洗类型")

w.write(0,5, u"CIP状态")

w.write(0,6, u"开始时间")#把需要导出的数据写到文件中

excel_row = 1

for obj indata_list:

w.write(excel_row, 0, excel_row)

w.write(excel_row,1, obj.CIPNo)

w.write(excel_row,2, obj.oper)

w.write(excel_row,3, obj.ccid)

w.write(excel_row,4, obj.mode)

w.write(excel_row,5, "CIP程序启动")

w.write(excel_row,6, datetime.strftime(obj.start_time, '%Y-%m-%d %H:%M:%S'))

excel_row+= 1sio=BytesIO() # 写出到IO

ws.save(sio)

sio.seek(0) # 重新定位到开始

response= HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel') #设置文件格式为Excel

#attachment(意味着消息体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框,将filename的值预填为下载后的文件名)

response['Content-Disposition'] = 'attachment; filename=test.xls'response.write(sio.getvalue())return response

提示:若出现 TypeError: string argument expected, got 'bytes'  错误。问题出现在使用StringIO的write方法上,用BytesIO替代StringIO即可解决问题,笔者这里已经替换过了

3. 前端请求

注意:但需要注意的是,如果想要用这种方式下载文件,不能使用AJAX的方式,而是应该新建一个标签,模拟点击下载。原因为处于安全性考虑,JavaScript无法与磁盘进行交互,因此AJAX得到的内容将被保留在内存中,而不是磁盘上。

3.1 请求方式为GET时:

此时直接在A标签的href属性中指定路由即可

导出报表

3.2 请求方式为POST时:

这种请求 需写一个form表单,把请求所需数据写在表单中,在A标签中指定表单的提交方法即可。(对于a标签实现post请求感兴趣的可以自行百度其他方法)

导出报表

开始日期:

id="startdate" class="input-text Wdate" name="startdate">

结束日期:

id="enddate" class="input-text Wdate" name="enddate">

线路:

all

目标:

all

搜索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值