博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个丑陋的文件下载网站
阅读量:7295 次
发布时间:2019-06-30

本文共 2478 字,大约阅读时间需要 8 分钟。

近来有个客户需要远程数据库里面的信息,但是又不想开放主机真实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 = 1    borders.right = 1    borders.top = 1    borders.bottom = 1    borders.bottom_colour=0x3A     #定义样式    style = xlwt.XFStyle()    style1 = xlwt.XFStyle()    style.borders = borders    style1.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文档sheet        x=0        for l in data_dict[k]:            y=0            for i in l:                if(y == 3):                    newsheet.write(x, y, i, style1)                else:                    newsheet.write(x, y, i, style)                y+=1            x+=1 #设置列宽        four_col=newsheet.col(3)        first_col=newsheet.col(0)        third_col=newsheet.col(2)        first_col.width=256*40        third_col.width=256*15        four_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

你可能感兴趣的文章
陈皓一起写Makefile 概述
查看>>
linux下安装启动rpc服务
查看>>
Software Testing, Lab 1
查看>>
World发布博客测试
查看>>
IIS 提高连接的并发数,和CPU的使用率。
查看>>
修改Sysvol复制方式
查看>>
python3.x中如何使用base64、base32、base16编码解码
查看>>
HDOJ 1084 排序 水
查看>>
深度拷贝一个链表
查看>>
POJ3229
查看>>
用promise封装ajax
查看>>
git创建工程
查看>>
UIScrollView的contentSize、contentOffset和contentInset属性
查看>>
IOS开发之自定义UITabBarController
查看>>
关于UI设计中的交互软件Axure7.0运用
查看>>
将网站项目转为 Web form应用程序(转)
查看>>
泛型简要原理
查看>>
poj 1254 Hansel and Grethel
查看>>
VirtualBox安装CentOS7
查看>>
Java豆瓣电影爬虫——抓取电影详情和电影短评数据
查看>>