欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

一个丑陋的文件下载网站

发布时间:2025/3/15 编程问答 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 一个丑陋的文件下载网站 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

近来有个客户需要远程数据库里面的信息,但是又不想开放主机真实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

总结

以上是生活随笔为你收集整理的一个丑陋的文件下载网站的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。