博主今天整理下Django框架中上传Excel文件并读取

博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图:

首先先建数据库模型

model.py

可以根据上传的日期区分目录

 # 用例文件
class CaseFile(models.Model):
case_class = models.ForeignKey(CaseClass)
file_name = models.FileField(upload_to='case/%Y/%m/%d/', verbose_name=u"文件名称") # 不注释会报错
# def __str__(self):
# return self.file_name # 定义表名称
class Meta:
verbose_name = "用例文件管理"
verbose_name_plural = "用例文件管理"

第二步

settings.py

配置文件上传路径

 # 文件上传配置
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload/')
MEDIA_URL = '/upload/'

第三步

新建excel.py

根据excel的数据来提取自己需要的转化成json格式,再组成数组

 # -*- coding: utf-8 -*-

 import xlrd
from MyPlatform.settings import MEDIA_ROOT class ExcelImport:
def __init__(self, file_name, version):
# self.file_name = unicode(file_name, "utf-8")
# 文件路径修改
self.file_name = (MEDIA_ROOT + str(file_name)).replace("/", "\\").decode("utf-8")
# print self.file_name
self.workbook = xlrd.open_workbook(self.file_name)
self.table = self.workbook.sheets()[0]
# 获取总行数
self.nrows = self.table.nrows # 版本号
self.version = version self.cases = [] def get_cases(self):
# 从第二行开始
for x in range(1, self.nrows):
row = self.table.row_values(x)
self.cases.append(
{
"case_class": row[3],
"name": row[4],
"code": row[0],
"level": row[5],
"condition": row[6],
"step": row[7],
"expected_result": row[9],
"version": self.version
}
)

第四步

forms.py

表单中新建文件表单

 # 文件上传表单
class FileForm(forms.Form):
file_name = forms.FileField(label=u"用例文件")

第五步

views.py

完成上传的逻辑

 # 用例导入
def case_excel_import(request, class_id):
# 判断是否有session
username = request.session.get("username")
if username:
# 如果有session 获取指定信息
if request.method == "POST":
ff = FileForm(request.POST, request.FILES)
# file_name = request.FILES.get('exampleInputFile')
if ff.is_valid():
file_name = ff.cleaned_data["file_name"] # 向数据库中新增用例文件数据
case_file = CaseFile()
case_file.case_class_id = int(class_id)
case_file.file_name = file_name
case_file.save()
# print case_file.file_name # 返回上传成功
messages.add_message(request, messages.INFO, u"上传成功!")
try:
build_case_import(file_name=case_file.file_name)
except Exception, e:
messages.add_message(request, messages.INFO, u"用例导入出错:" + str(e))
return HttpResponseRedirect("/caseList/" + class_id, {"ff": ff})
else:
ff = FileForm()
messages.add_message(request, messages.INFO, u"请选择文件!")
return HttpResponseRedirect("/caseList/" + class_id, {"ff": ff})
else:
ff = FileForm()
return HttpResponseRedirect("/caseList/" + class_id, {"ff": ff})
else:
# 如果没有session,重定向到路由 /login/, 返回表单
uf = UserForm(request.POST)
# 重定向
return HttpResponseRedirect("/login/", {"uf": uf})

导入成功后前端回显展示

前端代码:

博主使用的是模态框

 <div class="modal modal-default fade" id="modal-class">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">上传用例文件</h4>
</div>
<div class="modal-body">
<form class="form-group" enctype="multipart/form-data" method="post" action="/caseExcelImport/{{ case_class_one.id }}">
{% csrf_token %}
{{ ff.as_p }}
<p class="help-block">请求确保文件格式正确 .</p>
<p class="help-block">用例模块文件可下载 .</p>
<a href="/download/template" class="btn btn-default">
<i class="fa fa-download"> 下载</i>
</a>
<p class="help-block">excel格式的文件 .</p>
<p class="help-block">文件中小模块一栏填入最终所属测试模块 .</p>
<input type="submit" class="btn btn-default" value="上传"/>
<button type="button" class="btn btn-default pull-right" data-dismiss="modal">取消</button>
</form>
</div>
</div>
</div>
</div>

列表展示代码:

 <div class="row">
<div class="col-xs-12">
<div class="box">
<div class="box-header">
<h3 class="box-title">用例模块:{{ case_class_one.name }}</h3>
</div>
<!-- /.box-header -->
<div class="box-body">
<p>
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#modal-class" data-id="{{ case_class_one.id }}">
<i class="fa fa-caret-square-o-right"> 导入</i>
</button>
</p>
<table id="testcase" class="table table-bordered table-striped">
<thead>
<tr>
<th>用例编号</th>
<th>用例名称</th>
<th>用例等级</th>
<th>期望结果</th>
<th>操作按钮</th>
</tr>
</thead>
<tbody>
{% for case in cases %}
<tr>
<td>{{ case.code }}</td>
<td>{{ case.name }}</td>
<td>Level {{ case.level }}</td>
<td>{{ case.expected_result }}</td>
<td>
<a href="/caseInfo/{{ case_class_one.id }}/{{ case.case_id }}" >
<i class="fa fa-folder-open"> 查看</i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- /.box-body -->
</div>
</div>
</div>

前端效果:

Django框架(上传Excel文件并读取)的更多相关文章

  1. 【asp.net】asp.net实现上传Excel文件并读取数据

    #前台代码:使用服务端控件实现上传 <form id="form1" runat="server"> <div> <asp:Fil ...

  2. 上传excel文件,读取内容,增加事务写入数据库

    package com.inspur.icpmg.itss.asset.dao.impl; import com.inspur.icpmg.util.DBHelper; import org.apac ...

  3. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  4. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

  5. js上传Excel文件

    一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都 ...

  6. asp.net上传Excel文件到服务端进行读取

    1.我们IIS是使用7.5,由于在网站中上传Excel文件到服务端进行数据读取时候出现读取失败情况.一开始以为是没有按照office软件问题,其实不然,因为server是64位操作系统,如果我们要使用 ...

  7. jsp上传excel文件并导入数据库

    1,excel文件的上传 需要借助jar包:commons-fileupload-1.2.1.jar以及commons-io-1.3.2.jar 前端的html文件 <form id=" ...

  8. jmert中如何测试上传文件接口(测试上传excel文件)

    第一次用jmeter这个工具测试上传接口,以前没做过这一块,导致走了很多弯路.特地把经验谢谢,怕自己以后忘记... 一,jmeter如何上传文件 jmeter 的 http requests post ...

  9. 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据

    在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId& ...

随机推荐

  1. 从零打造在线网盘系统之Struts2框架配置全解析

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  2. postgresql 表空间创建、删除

    表空间:字面上理解就是表存储的物理空间,其实包括数据库的表.索引.序列等. 可以将表空间创建在服务器的不同分区,这样做的好处有: 一.如果初始化集群所在分区已经用光,可以方便的其他分区上创建表空间已达 ...

  3. Android N 通知概览及example

    概述 Android App的通知在维护你的App和用户之间的交互起着举足轻重的作用,为了提供更好的用户体验,Android N上的通知提供了可视化刷新,自定义视图和直接回复等功能.另外还提出了Mes ...

  4. 基于JDK1.8的String源码学习笔记

    String,可能是学习Java一上来就学习的,经常用,但是却往往只是一知半解,甚至API有时也得现查.所以还是老规矩,倒腾源码. 一.java doc 这次首先关注String的doc,因为其实作为 ...

  5. FNV hash算法

    原文:https://blog.csdn.net/u013137970/article/details/79020095 FNV算法简介FNV算法属于非密码学哈希函数,它最初由Glenn Fowler ...

  6. redhat 7.2 内网安装docker

    本文介绍在内网环境下如果通过网络代理映射来完成docekr的安装,首先在能上网的windows机器上安装squid,并启动,本实例中windows机器IP为 192.168.192.101 ,squi ...

  7. mysql实现开窗函数、Mysql实现分析函数

    关键字:mysql实现开窗函数.Mysql实现分析函数.利用变量实现窗口函数 注意,变量是从左到右顺序执行的 --测试数据 CREATE TABLE `tem` ( `id` ) NOT NULL A ...

  8. 基于struts2框架-自定义身份证号验证器

    自定义拦截器的步骤: 1.定义一个验证器的类: > 自定义的验证器都需要实现 Validator接口.  > 可以选择继承 ValidatorSupport 或 FieldValidato ...

  9. gcc安装多个版本

    http://blog.csdn.net/chid/article/details/6251781

  10. Django小项目简单BBS论坛

    开发一个简单的BBS论坛 项目需求: 1 整体参考"抽屉新热榜" + "虎嗅网" 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用 ...