大佬要我寫自動郵件報表系統

最近接到一個任務,將目前的郵件報表體系規整優化,格式嚴謹。
    的確,前段時間爲了省事,根據業務邏輯sql產生對應的csv格式的數據報表,用 csvtotable工具將長長的csv轉化爲頁面友好的html,因爲產生的html帶有js,郵件正文不容許任何帶有js內容文件充當正文,防止郵件木馬行爲。因此咱們採用了數據html做爲附件,正文寫附件簡介的方案定時發送相關報表。
    在電腦端一切正常,還有點小激動,畢竟比csv下載再查看的體驗好多了。正當我已熟悉這種模式,將全部相似任務都轉化爲附件+說明的方式的時候,一封發給大boss的自動報表敲醒了我,大佬們不按套路出牌,拿手機看郵件,結果我就被冠以給領導發木馬的罪名。冷靜下來,也不冤,的確是在開發過程當中沒有考慮用戶的使用習慣、平臺兼容性。
    而後,帶罪優化的任務來了。
    理清思路,尋找問題。自動郵件報表系統是爲了減小人工跑數、作Excel、發郵件的重複工做,用腳本定時執行相應任務。管理定時任務用crontab,組織執行用shell,業務跑數用sql,作Excel用csvtotable,發郵件用python,一條龍服務!
    可是,,問題來了,附件看起來像木馬,大佬想看正文,正文不能裝帶js的html,數據報表太長,所有羅列郵件長度可能撐爆。
    通過再三思量,附件對業務人員是必要的,不能取消;正文大佬想看,那就彙總一版大佬須要的簡潔指數報表;正文不能帶js,那就用 jinja2配和css來寫。
    方案有了就開工!
   根據業務邏輯獲得一份業務彙總sql,產生供正文使用的csv,利用 jinja2模板將csv數據填充到html頁面,造成正文html,渲染髮送!這樣一封既有大佬須要的彙總報表,又有業務人員須要的詳細數據的自動報表就出鍋了~
 
    下面建議介紹一下,摸索過程當中的細節:
 1 #含有中文的csv解析
 2 import sys
 3 import csv
 4 base_path = os.getcwd()+’/'
 5  
 6 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)
 9         for row in csv_reader:
10             yield [unicode(cell, 'utf-8') for cell in row]

 

謹記:在使用jinja的時候須要在項目文件夾中生成一個空的__init__.py,jinja模版放在templates文件夾路徑下,模板中針對表格格式作了設置,表頭突出,第一列文字靠左,數字靠右,最後一行彙總加淺灰底紋。。。
1 from jinja2 import Template
2 from jinja2 import Environment, PackageLoader
3  
4 env = Environment(loader=PackageLoader(‘項目文件夾名’))
5  
6 template = env.get_template('template.html')
7 content = template.render(data=tables)
好吧,關注微信公衆號「 正版喬」回覆「郵件」,給你項目代碼,且用且珍惜,說不定大佬又有進一步的需求。 
 
 
 
一個學統計的程序員
喜歡Coding
喜歡硬件
喜歡樹莓派
喜歡深度學習
喜歡你
相關文章
相關標籤/搜索