此篇文章关键阐述了Django提交wps表格格并将它们载入数据库系统,将文件传送到网络服务器特定途径,其实不是很难,文中分三个环节来给大家详解,需要的小伙伴可以参考一下
导言:
近期上级领导要统计技术单位在多个业务线投入的工时百分数,而jira现阶段的Tempo软件只有统计分析本人工时。于是便写了个报表软件,将jira中导出来本人的工时wps表格格导入数据库,在后面解决每个业务流程工时占有率。之后科学研究了jiri的API文本文档,选择放弃之前思路,立即调用jiraAPI建立模型,这些先不说。这篇文章博客关键详细介绍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('上传成功')
二、解析excel导入数据库
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.数据导入后,通过一些处理就得到了我们想要的数据。报表其中之一的饼图:
综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/128702.html
摘要:将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。可以在工具架构和开发流程不发生明显变化的前提下实现扩展。我们的初衷是分享在现代软件开发过程中发现的一些系统性问题,并加深对这些问题的认识。 简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论: 使用标准化流程自动配置,从...
摘要:必备工具箱威航软件园温馨提示由于先天不支持插件撤销事项,所以必备工具箱的任何操作都不可以撤销,但是在中就可以任意撤销,此外大家还可以通过这款强大的插件工具箱对烦人的热点弹窗功能予以彻底屏蔽哦。 EXCEL必备工具箱是一款大部分功能免费且齐全可还能同时支持微软EXCEL...
摘要:思路用现有的导出的插件,无法实现,所以只能手写各种样式代码关于打印页脚之类无从下手的要求,需要导出后,复制一份,原文件拖进,查看源码,复制的那份用打开,设置打印页脚。 背景 前段时间因一个需求后端无法完成,所以交给前端来实现,导出表格,需要实现:1、支持多个sheet,并且有自己的name2、根据要求合并单元格,设置单元格的宽高3、在表格内有各自的二维码4、打印的页边距为左右各0.5c...
摘要:主要通过样式为其赋予不同的表现标签用来定义内联行内元素,并无实际的意义。html文档结构 1 DOCTYPE html> 2 <html lang="zh-CN"> #这个lang表示语言,zh-CN中文的意思,整个文档的内容以中文为主,如果以英文为主,就写成lang=en 3 4 <head> 5 <meta charset...
摘要:在这些罕见的情况下,解析器必须重新启动,丢弃之前解码的内容。标签包含解析器必须收集的文本,然后发送到脚本引擎进行评估。如果文件内调用了,解析器将重新开始解析过程。事件当解析器完成时,它通过一个名为的事件宣布完成。 浏览器基本的工作流程 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 进入主话题之前,先罗列一下浏览器的主要构成: 用户界面- 包括地址栏、后退/前进...
阅读 893·2023-01-14 11:38
阅读 838·2023-01-14 11:04
阅读 708·2023-01-14 10:48
阅读 1894·2023-01-14 10:34
阅读 903·2023-01-14 10:24
阅读 754·2023-01-14 10:18
阅读 482·2023-01-14 10:09
阅读 523·2023-01-14 10:02