前端
<el-upload
class="upload-demo"
:action="path"
:on-success="getDeviceInfoData" //文件上传成功之后调用,刷新数据
:headers="headers"
>
<el-button class="el_but" size="small" type="primary">上传录入的数据</el-button>
</el-upload>
data中定义变量
path:this.$path + 'resources/deviceInfo/',
headers:{"Authorization":"JWT " + localStorage.getItem("token")}, // upload组件的请求头携带token
后台:
class DeviceInfoViewSet(ModelViewSet):
""""设备信息增删改查"""
serializer_class = DeviceInfoSerializer
queryset = DeviceInfo.objects.filter(Is_delete=1).order_by("id") # 查询使用了多线程,此排序就没用了
isExists = os.path.exists(os.path.dirname(os.path.realpath(__file__)) + "/excel")
if not isExists:
# 如果不存在则创建目录
os.makedirs(os.path.dirname(os.path.realpath(__file__)) + "/excel/")
def create(self, request, *args, **kwargs):
# excel上传设备信息解析录入
# serializer = self.get_serializer(data=request.data)
# serializer.is_valid(raise_exception=True)
# self.perform_create(serializer)
# headers = self.get_success_headers(serializer.data)
# print(2)
# logger_resource.info(request.data)
# print(3)
# return Response(serializer.data, headers=headers)
try:
data = request.data.get("file")
print("hello")
# 1,写入上传的excel文件至指定的服务器路径
with open(os.path.dirname(os.path.realpath(__file__)) + "/excel/" + data.name, 'wb') as f:
for chunk in data.chunks():
f.write(chunk)
# 2,解析上传的excel文件数据,存入数据库
# 打开已有xlsx文件
wb = load_workbook(os.path.dirname(os.path.realpath(__file__)) + "/excel/" + data.name)
# 获得所有sheet的名称
sheet_names = wb.get_sheet_names()
# 根据sheet名字获得sheet
sheet = wb.get_sheet_by_name(sheet_names[0])
# 获取最大行,for循环取值进行存储
max_row = sheet.max_row
# TODO
list_obj = []
for i in range(2, (max_row + 1)):
Di_name = sheet["A%d" % i].value # 设备名称
Di_type = sheet["B%d" % i].value # 设备类型
Di_version = sheet["C%d" % i].value # 设备规格
Di_firm = sheet["D%d" % i].value # 设备厂商
Di_address = sheet["E%d" % i].value # 使用地点
Di_range = sheet["F%d" % i].value # 设备量程
Di_num = sheet["G%d" % i].value # 设备编号
Di_SN = sheet["H%d" % i].value # 设备出厂编号
Check_number = sheet["I%d" % i].value # 仪校编号
Di_assets_nature = sheet["J%d" % i].value # 资产性质
Di_assets_id = sheet["K%d" % i].value # 资产编号
Di_column_id = sheet["M%d" % i].value # 列管编号
Di_use_id = sheet["M%d" % i].value # 使用编号
Di_dep = sheet["N%d" % i].value # 设备所属部门
Di_passage_num = sheet["O%d" % i].value # 通道数量
Di_status = sheet["P%d" % i].value # 设备状态
Di_is_accept = sheet["Q%d" % i].value # 是否验收
Accept_number = sheet["R%d" % i].value # 验收单号
Godown_number = sheet["S%d" % i].value # 入库单号
Di_temperature_max = sheet["T%d" % i].value # 最高温度
Di_temperature_min = sheet["U%d" % i].value # 最低温度
Di_accept_time = sheet["V%d" % i].value # 验收时间
Di_buy_time = sheet["W%d" % i].value # 购买时间
Di_Asset_manager = sheet["X%d" % i].value # 资产管理员工号
versions = sheet["Y%d" % i].value # 版本
address = sheet["H%d" % i].value # 通讯
list_obj.append(DeviceInfo(Di_name=Di_name,
Di_type=Di_type,
Di_version=Di_version,
Di_firm=Di_firm,
Di_address=Di_address,
Di_range=Di_range,
Di_num=Di_num,
Di_SN=Di_SN,
Check_number=Check_number,
Di_assets_nature=Di_assets_nature,
Di_assets_id=Di_assets_id,
Di_column_id=Di_column_id,
Di_use_id=Di_use_id,
Di_dep=Di_dep,
Di_passage_num=Di_passage_num,
Di_status=Di_status,
Di_is_accept=Di_is_accept,
Accept_number=Accept_number,
Godown_number=Godown_number,
Di_temperature_max=Di_temperature_max,
Di_temperature_min=Di_temperature_min,
Di_accept_time=Di_accept_time,
Di_buy_time=Di_buy_time,
Di_Asset_manager=Di_Asset_manager,
versions=versions,
address=address
))
DeviceInfo.objects.bulk_create(list_obj)
# 删除上传的文件
# os.remove(os.path.dirname(os.path.realpath(__file__)) + "/excel/" + data.name)
return ReturnData(message="设备信息录入成功")