近来有个客户需要远程数据库里面的信息,但是又不想开放主机真实ip,用户密码,数据库用户密码这些信息,就搞了一个丑陋的文件下载网站,把这些信息封装了起来

用到的包flask ,mysql-connector-python,xlwt

实现思路:

1、使用python连接数据库,读取数据

  使用mysql.connector模块连接数据库

  因语句固定,所以写到了脚本中,未实现用户交互输入,其实是懒

2、将数据进行处理后,写入excel表格

  使用xlwt模块写入excel表格

  因查出的数据格式和需要的不同,所以需要进行数据预先处理,然后再写入excel

3、通过web浏览器下载excel文件

  使用flask框架实现网页登录验证,实现文件下载

  通过nginx做代理,提供公网访问

经过一番折腾,终于功能实现,是否有bug,后续用用再说。有感触的几个地方有:

架构:将每个功能写入不同的模块,这样每个功能都可以单独测试,使用if __name__ == '__main__': test()写测试用例进行调试。当然也可以使用nosetests这样专门的测试模块,不过当时写的时候,还没接触nosetest。。。再加上功能也不复杂,后面也就不打算改写了

mysql数据库连接:可以使用字典存储连接信息,这样对于更换测试环境和生成环境会很方便;使用try语句连接,进行异常处理

 try:conn = mysql.connector.connect(**config)except mysql.connector.Error as e:print('open database failed !{} '.format(e))cursor=conn.cursor()cursor.execute(sql_str)values=cursor.fetchall()cursor.close()conn.close()

sql语句:使用字典存储语句,key值使用中文字符串,为后续写入excel的中文标签使用,非常方便

查询结果处理:因为查询语句的结果只有记录,没有字段头,所以把查询结果和字段列表进行了拼接,

        sh_ysh_tou=[('名称','类型',‘审核人’,'创建时间','任务状态'),]jg_dict['已审核'] = sh_ysh_tou + jg_dict['已审核']

写入excel:实现自定义单元格格式。

def newf(data_dict):#新建文件datatable = xlwt.Workbook(encoding='utf-8', style_compression=0)
#加边框  borders = xlwt.Borders()borders.left = 1borders.right = 1borders.top = 1borders.bottom = 1borders.bottom_colour=0x3A    #定义样式style = xlwt.XFStyle()style1 = xlwt.XFStyle()style.borders = bordersstyle1.borders = borders#自定义日期格式style1.num_format_str='YYYY/M/D h:mm:ss'for k in data_dict:#新建标签newsheet = datatable.add_sheet(k, cell_overwrite_ok=True)  #新建excel文档sheetx=0for l in data_dict[k]:y=0for i in l:if(y == 3):newsheet.write(x, y, i, style1)else:newsheet.write(x, y, i, style)y+=1x+=1

#设置列宽four_col=newsheet.col(3)first_col=newsheet.col(0)third_col=newsheet.col(2)first_col.width=256*40third_col.width=256*15four_col.width=256*20

#保存文件datatable.save('结果'+'.xls')

web框架:用到了 Flask,request,send_from_directory

app = Flask(__name__)@app.route('/signin', methods=['POST'])
def signin():# 需要从request对象读取表单内容:if request.form['username']=='admin' and request.form['password']=='password':chaxun()return send_from_directory(os.getcwd(),'结果.xls',as_attachment=True)if __name__ == '__main__':app.run()

越用,越觉得python优雅!嘿嘿

转载于:https://www.cnblogs.com/mathprice/p/9228215.html

一个丑陋的文件下载网站相关推荐

  1. 雨林木风:dll文件下载网站

    雨林木风:dll文件下载网站 国内创业网站雨林木风系统门户今日推出dll文件下载网站(http://dll.ylmf.net),对于Windows下常见DLL文件丢失问题,可提供修复功能.雨林木风创始 ...

  2. python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器

    原标题:Python3使用TCP编写一个简易的文件下载器 利用Python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造 ...

  3. 旅游网站的主页代码_一个在优化的网站主页内容应该如何设计?

    现在搜索引擎上面的网站只要是互联网行业的网站都是做了优化的只能说是效果好与不好,只要是注重做优化的网站都会非常重视网站主页的设计,那么一个在优化的网站主页内容应该如何设计呢?接下来我们就来了解一下: ...

  4. html网页注册信息不完全时有警示_??使用Github做一个完全免费的个人网站(步骤很细)...

    首先,我霸都傲天申明绝对是完全免费,不会在文章中推销什么云服务器,虚拟主机等.而且操作步骤上手简单,即使非IT人员也很容易实现. 局限:只能是静态网站的个人网站 面向读者:所有人包括非IT人员 首先如 ...

  5. 华为云部署html网页,手把手教你如何在华为云服务器上部署一个自己的弹幕网站!...

    开发思路 首先是让弹幕的随机高度出现,这个计算方法是:最大高度=屏幕的高度-发送div的高度-弹幕本身的高度,范围就是 0-最大高度了,弹幕总是从右往左移动,所以出现最右侧的位置计算方法是:最右侧位置 ...

  6. 【网站开发】搭建一个属于自己的网站

    概述 搭建一个属于自己的网站 1.购买域名 主机屋http://www.zhujiwu.com/ 购买的域名:TechShare.xyz 2.购买虚拟主机(空间) http://www.zhujiwu ...

  7. 分享一个WebGL开发的网站-用JavaScript + WebGL开发3D模型

    这张图每位程序员应该都深有感触. 人民心目中的程序员是这样的:坐在电脑面前噼里啪啦敲着键盘,运键如飞. 现实中程序员是这样的:编码5分钟,调试两小时. 今天我要给大家分享一个用WebGL开发的网站,感 ...

  8. 如何抓取一个网站的分页_如何设计一个吸引人的网站

    做网站的好处就是能够利用网站来展示推广产品,提升公司形象,为公司的发展提供有效的平台,还能扩大销售渠道.但是,想要建设一个吸引人的网站是要求非常高的,今天八爪网就来教大家如何设计一个吸引人的网站,一起 ...

  9. 如何从零搭建一个hexo博客网站01

    title: 如何从零搭建一个hexo博客网站01 #文章標題 categories: "Hexo教程" #文章分類目錄 可以省略 categories: "Hexo教程 ...

最新文章

  1. Spring基础16——使用FactoryBean来创建
  2. 新东方php工程,这几个游学项目介绍,了解一下
  3. 160个Crackme025之巧去Neg
  4. 第一次使用OD和IDA动静结合找出软件的注册算法
  5. Tomcat 之 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099;...
  6. hibernate之CRUD操作
  7. 好程序员教程分析Vue学习笔记五
  8. 小米这两款手机沦为“难兄难弟”,再降价也清不了库存
  9. 各种系统扫描磁带驱动器的操作方法
  10. 5G 时代,AI 如何破竹而出? | AI ProCon
  11. 金字塔原理--公开演讲
  12. 从自卑的阴影中走出来
  13. java延迟加载 dbutils_Mybatis__延迟加载
  14. python写脚本的优势_python写脚本的优势玩被叫
  15. python装饰器打印函数执行时间_使用python装饰器计算函数运行时间的实例
  16. 小白学习Python的一点建议
  17. Visio 2003 Professional 安装序列号
  18. qt实现windows系统下录屏功能
  19. 一个故事搞懂Java并发编程
  20. android 适配红米,小米MIUI放出Android Q适配计划,11款手机参与,包括红米Note 7

热门文章

  1. C#中拷贝指定文件夹下的所有文件夹目录到指定文件夹中的方法
  2. HTML简单实例加表单的显示效果
  3. 怎么在oracle中使用for循环
  4. pg数据库json数据类型_PostgreSQL与开发者起舞—让数据库更好服务于开发
  5. htop linux命令详解,htop使用详解
  6. 手册如何看运放的db_如何处理金属离子与配体之间的配位键?
  7. html5+、ReactNative、Weex、Ionic之间的区别、(配置java、python、Android环境)、ReactNative(react-native-cli)、yarn、Weex
  8. CSS简介、行内样式、内部样式、外部样式、注释、引入其他CSS文件
  9. mysql门派年龄最大的人_目前活着年龄最大的人
  10. ElasticSearch和solr的对比