Django导出Excel,前端下载_django 生成excel 并返回地址给前端下载

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

def EPC(request):
#获取数据
CompanyPrefixLength = int(request.POST.get(‘CompanyPrefixLength’, 0))
FilterValue = request.POST.get(‘FilterValue’, 0)
UPC = request.POST.get(‘UPC’, 0)
SerialNumber = int(request.POST.get(‘SerialNumber’, 0)) - 1
StartSerialNumber = SerialNumber + 1
AllNumber = int(request.POST.get(‘AllNumber’, 0))
#创建excel表
wb = openpyxl.Workbook()
wa = wb.active
wa.column_dimensions[‘B’].width = 15
wa.column_dimensions[‘C’].width = 20
wa.column_dimensions[‘D’].width = 30
wa.append([‘ID’, ‘SerialNumber’, ‘BarCode’, ‘EPC’])
ID = 0
ExcelIndex = 1 # excel插入行数据索引
#Header 二进制8bits
Header_bits = ‘00110000’
#filter过滤值3bits
if FilterValue == ‘0’:
Filter_bits = ‘000’
elif FilterValue == ‘1’:
Filter_bits = ‘001’
elif FilterValue == ‘2’:
Filter_bits = ‘010’
elif FilterValue == ‘3’:
Filter_bits = ‘011’
elif FilterValue == ‘4’:
Filter_bits = ‘100’
elif FilterValue == ‘5’:
Filter_bits = ‘101’
elif FilterValue == ‘6’:
Filter_bits = ‘110’
elif FilterValue == ‘7’:
Filter_bits = ‘111’
else:
print(‘error’)

根据GS1公司前缀长度进而判断

if CompanyPrefixLength == 6:
Cutoff_Point = 7
GS1_Company_Prefix_bitslen = 20
ID_IRN_bitslen = 24
Partition_bits = ‘110’ # 6
elif CompanyPrefixLength == 7:
Cutoff_Point = 8
GS1_Company_Prefix_bitslen = 24
ID_IRN_bitslen = 20
Partition_bits = ‘101’ # 5
elif CompanyPrefixLength == 8:
Cutoff_Point = 9
GS1_Company_Prefix_bitslen = 27
ID_IRN_bitslen = 17
Partition_bits = ‘100’ # 4
elif CompanyPrefixLength == 9:
Cutoff_Point = 10
GS1_Company_Prefix_bitslen = 30
ID_IRN_bitslen = 14
Partition_bits = ‘011’ # 3
elif CompanyPrefixLength == 10:
Cutoff_Point = 11
GS1_Company_Prefix_bitslen = 34
ID_IRN_bitslen = 10
Partition_bits = ‘010’ # 2
elif CompanyPrefixLength == 11:
Cutoff_Point = 12
GS1_Company_Prefix_bitslen = 37
ID_IRN_bitslen = 7
Partition_bits = ‘001’ # 1
elif CompanyPrefixLength == 12:
Cutoff_Point = 13
GS1_Company_Prefix_bitslen = 40
ID_IRN_bitslen = 4
Partition_bits = ‘000’ # 0

GTIN_BITS_PRO = Header_bits + Filter_bits + Partition_bits
GS1_Company_Prefix = UPC[1:Cutoff_Point]
ID_IRN = UPC[0] + UPC[Cutoff_Point:13]

GS1_Company_Prefix化为二进制,如果不够规定位数,前面加’0’

GS1_Company_Prefix_bits = add_zero(dec2bin(GS1_Company_Prefix), GS1_Company_Prefix_bitslen) # 24bits

ID_IRN 化为二进制,如果不够规定位数,前面加’0’

ID_IRN_bits = add_zero(dec2bin(ID_IRN), ID_IRN_bitslen)
GTIN_BITS = GTIN_BITS_PRO + GS1_Company_Prefix_bits + ID_IRN_bits
for i in range(AllNumber):
ID += 1
ExcelIndex += 1
SerialNumber += 1
wa.cell(ExcelIndex, 1, str(ID))
wa.cell(ExcelIndex, 2, str(SerialNumber))
wa.cell(ExcelIndex, 3, str(UPC))
wa.cell(ExcelIndex, 4, bin2hex(GTIN_BITS + add_zero(dec2bin(SerialNumber), 38)))
output = BytesIO()
wb.save(output)
output.seek(0)
response = HttpResponse(output.getvalue(), content_type=‘application/vnd.ms-excel’)

ctime = datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S’)

file_name = ‘export.xls’ % ctime # 给文件名中添加日期时间

file_name = urlquote(file_name) # 使用urlquote()方法解决中文无法使用的问题

response[‘Content-Disposition’] = ‘attachment; filename=bug_info.xls’

response.write(output.getvalue()) # 在设置HttpResponse的类型时,如果给了值,可以不写这句

return response

前端请求代码与返回结果:

if(CheckData() == true){
KaTeX parse error: Expected '}', got 'EOF' at end of input: …nyPrefixLength:(“.CompanyPrefixLength”).val(),
FilterValue: ( " . F i l t e r V a l u e " ) . v a l ( ) , U P C : (".FilterValue").val(), UPC: (".FilterValue").val(),UPC:(“.UPC”).val(),
SerialNumber: ( " . S e r i a l N u m b e r " ) . v a l ( ) , A l l N u m b e r : (".SerialNumber").val(), AllNumber: (".SerialNumber").val(),AllNumber:(“.AllNumber”).val()
},
type:‘POST’,
dataType:‘json’,
complete:function (data) {
console.log(“complete”);
console.log(data);
}
})

返回的数据应该都是存储在reponseTest,还有乱码,所以可以用XMLHttpRequest来请求。
在这里插入图片描述
前端用XMLHttpRequest请求代码:

let data = JSON.stringify({
“CompanyPrefixLength”: ( " . C o m p a n y P r e f i x L e n g t h " ) . v a l ( ) , " F i l t e r V a l u e " : (".CompanyPrefixLength").val(), "FilterValue": (".CompanyPrefixLength").val(),"FilterValue":(“.FilterValue”).val(),
“UPC”: ( " . U P C " ) . v a l ( ) , " S e r i a l N u m b e r " : (".UPC").val(), "SerialNumber": (".UPC").val(),"SerialNumber":(“.SerialNumber”).val(),
“AllNumber”😒(“.AllNumber”).val()
})
const req = new XMLHttpRequest();
req.open(‘POST’,‘http://192.168.0.68:8000/conversion/EPC/’, true);
req.responseType = ‘blob’;
req.setRequestHeader(‘Content-Type’, ‘application/json’); //设置请求头
req.send(data); //输入参数
req.onload = function() {
const data = req.response;
const a = document.createElement(‘a’);
const blob = new Blob([data]);
const blobUrl = window.URL.createObjectURL(blob); //创建下载的链接
a.href = blobUrl;
a.download = ‘EPC.xls’; //下载后文件名
// a.download = unescape(req.headers.filr)
a.click();
// self.download(blobUrl);
};

后端接收代码:

判断

回到题目,如果你真想检验一个人的水平。第一步先考察一下基本的编程基础,问几个基本的编程问题,可以和前端相关也可以无关。比如垃圾收集大致是怎么做的,setTimeout 大致做了什么(说会在另一个线程里执行回调的直接毙掉)。

第二步考察一下知识面,问问http、tcp的基本知识,dns是怎么工作的,或者常用框架的实现原理,看看候选人是不是除了自己的一亩三分地什么都不关心。

第三步考察hold业务逻辑的能力,从一个简单的注册页,或者查询页开始,先让说下代码的基本架构,然后需求、性能、可靠性、安全层层加码,看看能不能很快的反馈出解决方案。能对答如流的要么做过,要么对他来说这种复杂度的东西是小case。

前三步都没问题,基本上说明候选人已经还行了,但是行到什么程度,不知道。如果想找比较厉害的,就增加个第四步,亮点项目考察。

总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了,我整理一套前端面试题分享给大家,希望对即将去面试的小伙伴们有帮助!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-KY0bBCYD-1713660669570)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值