最近接到乙個任務,將目前的郵件報表體系規整優化,格式嚴謹。
的確,前段時間為了省事,根據業務邏輯sql產生對應的csv格式的資料包表,用csvtotable工具將長長的csv轉化為頁面友好的html,由於產生的html帶有js,郵件正文不允許任何帶有js內容檔案充當正文,防止郵件木馬行為。所以我們採用了資料html作為附件,正文寫附件簡介的方案定時傳送相關報表。
然後,帶罪優化的任務來了。
理清思路,尋找問題。自動郵件報表系統是為了減少人工跑數、做excel、發郵件的重複工作,用指令碼定時執行相應任務。管理定時任務用crontab,組織執行用shell,業務跑數用sql,做excel用csvtotable,發郵件用python,一條龍服務!
但是,,問題來了,附件看起來像木馬,大佬想看正文,正文不能裝帶js的html,資料包表太長,全部羅列郵件長度可能撐爆。
經過再三思量,附件對業務人員是必要的,不能取消;正文大佬想看,那就彙總一版大佬需要的簡潔指數報表;正文不能帶js,那就用jinja2配和css來寫。
方案有了就開工!
根據業務邏輯得到乙份業務彙總sql,產生供正文使用的csv,利用 jinja2模板將csv資料填充到html頁面,形成正文html,渲染傳送!這樣一封既有大佬需要的彙總報表,又有業務人員需要的詳細資料的自動報表就出鍋了~
下面建議介紹一下,摸索過程中的細節:
1謹記:在使用jinja的時候需要在專案資料夾中生成乙個空的__init__.py,jinja模版放在templates資料夾路徑下,模板中針對**格式做了設定,表頭突出,第一列文字靠左,數字靠右,最後一行彙總加淺灰底紋。。。#含有中文的csv解析
2import
sys3
import
csv4 base_path = os.getcwd()+』/'56
def unicode_csv_reader(csv_path, dialect=csv.excel, **kwargs):
7 with open(base_path +csv_path) as f:
8 csv_reader = csv.reader(f, dialect=dialect, **kwargs)
9for row in
csv_reader:
10yield [unicode(cell, '
utf-8
') for cell in row]
1乙個學統計的程式設計師from jinja2 import
template
2from jinja2 import
environment, packageloader
34 env = environment(loader=packageloader(『專案資料夾名』))
56 template = env.get_template('
template.html')
7 content = template.render(data=tables)
喜歡coding
喜歡硬體
喜歡樹莓派
喜歡深度學習
喜歡你
Python實現自動寫郵件
上星期接到任務要完成乙個自動寫郵件的指令碼,基本功能是每兩小時執行一次程式跑出統計 並將統計 的summary傳送到領導的郵箱。由於公司是做數字貨幣的,每兩小時實時監測策略交易情況較為必要。下面來實現自動寫郵件的功能部分 import smtplib from email.mime.text imp...
朋友要我寫的。
呂秧秧熄燈後回到寢室,發現今晚的氣氛有點不對勁。平時這個時候宿舍裡的 5000 只鴨子早就已經煮開鍋了,但今天這個由 4個年級 8個專業組成的綜合寢室愣是連打呼嚕的聲音都沒有。呂秧秧正打算輕手輕腳地解決完個人衛生問題,只聽見宿舍老大 a君不緊不慢地開腔了 秧秧,聽說今天你們班陪舞去了?黑暗中看不清呂...
我要開始寫技術部落格了!
雖然大學畢業已經有半年多了,但是程式設計師這份工作才算是剛剛開始,之前工作的內容是sap bpc,雖然bpc對於企業應用十分適合,快捷簡單,但自己的興趣和目標都是進入網際網路行業,所以就要轉到做j a的專案,還好,12月,我進入了j a的專案。寫部落格的目的是記下工作中遇到的問題以及解決的方法,不懂...