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


    最近接到一个任务,将目前的邮件报表体系规整优化,格式严谨。
        的确,前段时间为了省事,根据业务逻辑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
    喜欢硬件
    喜欢树莓派
    喜欢深度学习
    喜欢你
  • 相关阅读:
    AS将一个项目导入到另一个项目中
    Android Studio出现:Cause: unable to find valid certification path to requested target
    小米手机Toast带app名称
    PopupWindow 点击外部区域无法关闭的问题
    EditText inputType类型整理
    Fragment通过接口回调向父Activity传值
    Android selector一些坑
    Installation failed with message Failed to commit install session 634765663 with command cmd package
    旷视上海研究院机器人方向招聘
    语义SLAM的数据关联和语义定位(四)多目标测量概率模型
  • 原文地址:https://www.cnblogs.com/qiaohaoforever/p/10209989.html
Copyright © 2020-2023  润新知