根据预定模板,将内容填写到Excel后上传,绝对比手动操作效率高很多。这里记录一下使用Django编写上传Excel并读取的步骤。另外小于2.5M的文件,Django都是在内存中读取,本文不包括保存Excel到服务器内容。
本文采用的例子是:上传一份试卷。
代码涉及到知识点:Bootstrap前端界面、Ajax与Django通信、xlrd读取Excel
1. 需求描述
系统添加试卷上传导入功能,上传保存着整张试卷结构Excel后,可以读取并保存。
试卷大概是这个三级存储结构,章节存着试卷的id,试题存着章节的id。
2. 设计的Excel格式如下:说明:下图模板中第二行,章节数量需要要等于最后的章节序号,程序通过章节数量计算出章节的结束行,进而计算出试题的起始行。
3. 上传html模板设计讲解
1. 这里请注意,Form必须有multipart/form-data;
2. 不用试图去显示上传路径,出去安全原因会变成fakepath,然后会费劲的寻找fakepath的解决办法,fakepath变实际路径,其实不显示路径,也没啥损失;
3. 不要问我csrf_token 是什么鬼,重点看Bootstrap布局。
4. 浏览按钮js
5. 定义url映射
url(r’^import_paper/$’, views.import_paper, name=’ImportPaper’),
6. Ajax调用方法
上传有好多方法,用自己最熟悉的Ajax方法,挂接btn_import_paper的click函数,通过Ajax调用 ImportPaper函数。关键语句已标红。
7. View中读取Excel
讲解:
1. JS中的append到Form的paper_file,通过request.FILES.get(‘paper_file’)读取出来;
2. 使用xlrd读取Excel,取得所有行列,根据行列取得值用cell_value,wb实例用完记得释放一下内存。
3. 循环用for x in range(sec_start_line,sec_end_line): 循环包括sec_start_line, 不包括sec_end_line
4. 读取后内容存储到数据库代码与本文无关所以去掉了,根据每人根据自己情况存储即可。
8. 效果图
领取专属 10元无门槛券
私享最新 技术干货