博主今天整理下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. 三维凸包求内部一点到表面的最近距离(HDU4266)

    http://acm.hdu.edu.cn/showproblem.php?pid=4266 The Worm in the Apple Time Limit: 50000/20000 MS (Jav ...

  2. Mssql备份失败

    Mssql备份失败出现如下提示 备份时先删除默认的备份设备,自己选择路径

  3. 使用 Visual Studio 将 ASP.NET Web 应用部署到 Azure

    原文地址:https://www.azure.cn/zh-cn/documentation/articles/web-sites-dotnet-get-started 配置新的 Web 项目 下一步是 ...

  4. SQLAlchemy中scoped_session实现线程安全

    不多说,先上代码 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchem ...

  5. HTML实例 - 购物商场页面

    效果图 代码 https://coding.net/u/James_Lian/p/Shopping-page/git 示例 https://coding.net/u/James_Lian/p/Shop ...

  6. Python并行编程(十四):异步编程

    1.基本概念 除了顺序执行和并行执行的模型以外,还有异步模型,这是事件驱动模型的基础.异步活动的执行模型可以只有一个单一的主控制流,能在单核心系统和多核心系统中运行. 在并发执行的异步模型中,许多任务 ...

  7. 爬虫之BeautifulSoup

    BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后便可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单. ...

  8. Openstack(六)RabbitMQ集群

    各组件通过消息发送与接收是实现组件之间的通信: 6.1安装RabbitMQ 6.1.1安装RabbitMQ # yum install rabbitmq-server –y # systemctl s ...

  9. Python自动发送邮件-smtplib和email库

    ''' 一.先导入smtplib模块 导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以163为例子百度搜索服务器是 smtp.163.com 三. ...

  10. MySQL server has gone away 问题的解决方法(转)

    mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造成这样的原因一般是s ...