Django上传excel表格有几个步骤,怎样做
Admin 2022-08-04 群英技术资讯 1243 次浏览
在这篇文章中,我们来学习一下“Django上传excel表格有几个步骤,怎样做”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。最近公司领导要统计技术部门在各个业务条线花费的工时百分比,而 jira 当前的 Tempo 插件只能统计个人工时。于是就写了个报表工具,将 jira 中导出的个人工时excel表格 导入数据库,在后端处理各个业务工时占比。后来研究了 jira 的 API 文档 ,放弃了之前的思路,直接调用 jira API 处理数据 ,这个先不谈。这篇博客主要介绍 Django 上传文件,然后解析 excel 导入数据库。
将文件上传到服务器指定路径,其实很简单,一共有三个步骤:
1.配置 setting.py
# 文件上传配置 UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')
2.前端代码如下,使用 <form> 表单提交,"/upload/" 路由配置在 urls 中,这个就不再多说了。
{% extends 'base.html' %}
{% block content %}
<body>
<form id="form" enctype="multipart/form-data" action="/upload/" method="post">
<p><input type="file" name="file"></p>
<input type="submit" name="提交">
</form>
</body>
{% endblock %}
3.后端代码如下,这段代码可以上传任意格式的文件,没有校验文件类型。
@csrf_exempt
def upload(request):
# 根name取 file 的值
file = request.FILES.get('file')
logger.log().info('uplaod:%s'% file)
# 创建upload文件夹
if not os.path.exists(settings.UPLOAD_ROOT):
os.makedirs(settings.UPLOAD_ROOT)
try:
if file is None:
return HttpResponse('请选择要上传的文件')
# 循环二进制写入
with open(settings.UPLOAD_ROOT + "/" + file.name, 'wb') as f:
for i in file.readlines():
f.write(i)
except Exception as e:
return HttpResponse(e)
return HttpResponse('上传成功')
1.文件上传结束后,接下来读取刚上传到服务器的 excel 表格,然后写入数据库。所以整个后端代码是这样的:
# 将excel数据写入mysql
def wrdb(filename):
# 打开上传 excel 表格
readboot = xlrd.open_workbook(settings.UPLOAD_ROOT + "/" + filename)
sheet = readboot.sheet_by_index(0)
#获取excel的行和列
nrows = sheet.nrows
ncols = sheet.ncols
print(ncols,nrows)
sql = "insert into working_hours (jobnum,name,workingtime,category,project,date,createtime) VALUES"
for i in range(1,nrows):
row = sheet.row_values(i)
jobnum = row[4]
name = row[5]
workingtime = row[2]
category = row[8]
project = row[1]
date = xldate_as_datetime(row[3],0).strftime('%Y/%m/%d')
values = "('%s','%s','%s','%s','%s','%s','%s')"%(jobnum,name,workingtime,category,project,date,datetime.datetime.now())
sql = sql + values +","
# 为了提高运行效率,一次性把数据 insert 进数据库
sql = sql[:-1]
# 写入数据库
# DataConnection 是自定义的公共模块,用的是第三方库,用来操作数据库。没有用 ORM ,后续有 group by 等复杂 sql 不好操作。
DataConnection.MysqlConnection().insert('work',sql)
@csrf_exempt
def upload(request):
# 根name取 file 的值
file = request.FILES.get('file')
print('uplaod:%s'% file)
# 创建upload文件夹
if not os.path.exists(settings.UPLOAD_ROOT):
os.makedirs(settings.UPLOAD_ROOT)
try:
if file is None:
return HttpResponse('请选择要上传的文件')
# 循环二进制写入
with open(settings.UPLOAD_ROOT + "/" + file.name, 'wb') as f:
for i in file.readlines():
f.write(i)
# 写入 mysql
wrdb(file.name)
except Exception as e:
return HttpResponse(e)
return HttpResponse('导入成功')
2.数据导入后,通过一些处理就得到了我们想要的数据。报表其中之一的饼图:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了Pandas 缺失数据处理代码汇总,在pandas中,缺失数据显示为NaN。缺失值有3种表示方法,np.nan,none,pd.NA,更多相关介绍需要的朋友可以参考下面文章内容
大家好,本篇文章主要讲的是python二分法查找函数底值,感兴趣的同学赶快来看一看吧,对你有用的话记得收藏一下,方便下次浏览
这篇文章主要介绍了PyTorch一小时掌握之图像识别实战篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这篇文章主要介绍了基于python分布式爬虫并解决假死的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
这篇文章主要介绍了Python学习之名字,作用域,名字空间,文章围绕主题展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考以一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008