一个丑陋的文件下载网站
近來有個客戶需要遠程數據庫里面的信息,但是又不想開放主機真實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
總結
以上是生活随笔為你收集整理的一个丑陋的文件下载网站的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python_GUI操作(鼠标、键盘)
- 下一篇: 自我认识