Django接口平台开发问题记录(四)
Django框架下怎么使用layui模版上传excel表并保存到数据库,不需要提交form表单来实现
场景:使用layui模版按钮实现Django框架下上传excel表格数据并保存到数据库
思路:通过layui中的方法定义上传的类型及url,后台通过xlrd库将获取的文件解析,前后端代码如下:
<div class="layui-upload">
<button type="button" class="layui-btn" id="test3" name="file"><i class="layui-icon"></i>上传文件</button>
</div>
layui.use('upload', function () {
var $ = layui.jquery
, upload = layui.upload;
upload.render({
elem: '#test3'
, url: "{% url 'TestPlatform_User:UploadExcel' %}" //改成自己的上传路径
, accept: 'file'
, auto: true
, done: function (res) {
console.log(res);
if ('{{message}}' === '导入失败') {
layer.msg('上传失败');
} else {
layer.msg('上传成功');
setTimeout("window.location.reload()",2000);
}
}
});
});
以上为前端代码,其中url是指向自己后台上传文件的函数
def UploadExcel(request):
if request.method == 'POST':
f = request.FILES.get('file')
excel_type = f.name.split('.')[1]
if excel_type in ['xlsx', 'xls']:
# 开始解析上传的excel表格
wb = xlrd.open_workbook(filename=None, file_contents=f.read())
table = wb.sheets()[0]
rows = table.nrows # 总行数
data_list = [] # 获取表中数据
try:
for i in range(rows):
if i != 0:
data_list.append(table.row_values(i))
in_id = data_list[i - 1][0]
in_mname = data_list[i - 1][1]
in_type = data_list[i - 1][2]
in_url = data_list[i - 1][3]
in_data_type = data_list[i - 1][4]
in_data = data_list[i - 1][5]
in_tname = data_list[i - 1][6]
in_expected_result = data_list[i - 1][7]
in_actual_result = data_list[i - 1][8]
add_interface = Interface_Data(in_id=in_id, in_mname=in_mname, in_type=in_type,
in_url=in_url,in_data_type=in_data_type, in_data=in_data,
in_tname=in_tname,in_expected_result=in_expected_result,
in_actual_result=in_actual_result)
add_interface.save()
except:
logger.error('解析excel文件或者数据插入错误')
return HttpResponse(json.dumps(data_list),{'message': '导入成功'})
else:
logger.error('上传文件类型错误!')
return render(request, 'Page/Interface_List.html', {'message': '导入失败'})
后端代码如上,上传成功的话需要返回json格式数据,否则会报错!
以上就是实现的上传功能,不需要submit按钮来提交form表单,只需一个上传按钮解决