天天看点

Django接口平台开发问题记录(四)(Django框架下使用layui模版上传excel表,不提交form表单来实现)Django接口平台开发问题记录(四)

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表单,只需一个上传按钮解决