天天看點

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表單,隻需一個上傳按鈕解決