zoukankan      html  css  js  c++  java
  • 大佬要我写自动邮件报表系统

    最近接到一个任务,将目前的邮件报表体系规整优化,格式严谨。
        的确,前段时间为了省事,根据业务逻辑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
    喜欢硬件
    喜欢树莓派
    喜欢深度学习
    喜欢你
  • 相关阅读:
    佛教哲学 学习笔记 01-我愿为十方人做桥
    动手学python之python基础:标识符,注释及缩进
    动手学python系列序言
    基于深度学习的目标检测综述(一):简介及骨干网络
    软件项目风险管理
    axure
    软件项目管理
    软件测试方法
    期中总结
    UML图相关
  • 原文地址:https://www.cnblogs.com/qiaohaoforever/p/10209989.html
Copyright © 2011-2022 走看看