为了账号安全,请及时绑定邮箱和手机立即绑定

大佬要我写自动邮件报表系统

标签:
Html/CSS

最近接到一个任务,将目前的邮件报表体系规整优化,格式严谨。

    的确,前段时间为了省事,根据业务逻辑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 Template2 from jinja2 import Environment, PackageLoader3  4 env = Environment(loader=PackageLoader(‘项目文件夹名’))5  6 template = env.get_template('template.html')7 content = template.render(data=tables)

复制代码

原文出处:https://www.cnblogs.com/qiaohaoforever/p/10209989.html  

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消