题记:实现这个功能也是遇到各自坑,各自查资料,从昨天到今天早上,也算是理通了,实现了交互与下载excel表小功能,这个下载功能也算是比较常用的,也感谢那些免费提供资料的网上的小伙伴们,我也把问题记录下来,大家有需要都可以查阅。
文章目录
坑一:出现403(Forbidden)的错误。
问题解决:可以在django项目的setting.py下注释‘‘django.middleware.csrf.CsrfViewMiddleware’’。
坑二:用ajax请求不能异步下载文件,这是小点,不过进去了,就是无底洞。
django后台代码:
from django.http import HttpResponse
from django.shortcuts import render
import openpyxl
from io import BytesIO
#显示界面
def index(request):
return render(request,'index.html')
#生成所需方法
base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]
# bin2dec
# 二进制 to 十进制: int(str,n=10)
def bin2dec(string_num):
return str(int(string_num, 2))
# dec2bin
# 十进制 to 二进制: bin()
def dec2bin(string_num):
num = int(string_num)
mid = []
while True:
if num == 0: break
num,rem = divmod(num, 2)
mid.append(base[rem])
return ''.join([str(x) for x in mid[::-1]])
# dec2hex
# 十进制 to 十六进制: hex()
def dec2hex(string_num):
num = int(string_num)
mid = []
while True:
if num == 0: break
num,rem = divmod(num, 16)
mid.append(base[rem])
return ''.join([str(x) for x in mid[::-1]])
#二进制 to 十六进制
def bin2hex(string_num):
return dec2hex(bin2dec(string_num))
# hex2dec
# 十六进制 to 十进制
def hex2dec(string_num):
return str(int(string_num.upper(), 16))
# 十六进制 to 二进制: bin(int(str,16))
def hex2bin(string_num):
return dec2bin(hex2dec(string_num.upper()))
#为字符串按照输入长度补'0'
def add\_zero(str,gd_length):
if (str.__len__() < gd_length):
add_zero = '0'
for i in range(gd_length - str.__len__() - 1):
add_zero += '0'
str = add_zero + str
return str
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'
### 学习笔记
主要内容包括**html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue**等等
**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**
>**HTML/CSS**
**HTML:**HTML基本结构,标签属性,事件属性,文本标签,多媒体标签,列表 / 表格 / 表单标签,其他语义化标签,网页结构,模块划分
**CSS:**CSS代码语法,CSS 放置位置,CSS的继承,选择器的种类/优先级,背景样式,字体样式,文本属性,基本样式,样式重置,盒模型样式,浮动float,定位position,浏览器默认样式
![](https://img-blog.csdnimg.cn/img_convert/07bd88684c148d87af2f45992483beb1.webp?x-oss-process=image/format,png)
>**HTML5 /CSS3**
**HTML5:**HTML5 的优势,HTML5 废弃元素,HTML5 新增元素,HTML5 表单相关元素和属性
**CSS3:**CSS3 新增选择器,CSS3 新增属性,新增变形动画属性,3D变形属性,CSS3 的过渡属性,CSS3 的动画属性,CSS3 新增多列属性,CSS3新增单位,弹性盒模型
![](https://img-blog.csdnimg.cn/img_convert/9a84fe3bc13a8a485b1fe91e6c4593b0.webp?x-oss-process=image/format,png)
>**JavaScript**
**JavaScript:**JavaScript基础,JavaScript数据类型,算术运算,强制转换,赋值运算,关系运算,逻辑运算,三元运算,分支循环,switch,while,do-while,for,break,continue,数组,数组方法,二维数组,字符串
转存中...(img-131vOqfR-1714142053808)]
>**JavaScript**
**JavaScript:**JavaScript基础,JavaScript数据类型,算术运算,强制转换,赋值运算,关系运算,逻辑运算,三元运算,分支循环,switch,while,do-while,for,break,continue,数组,数组方法,二维数组,字符串
![](https://img-blog.csdnimg.cn/img_convert/060c0b20598413d3b55b7719a396f9d1.webp?x-oss-process=image/format,png)