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