web development blog

> 编程 Flask & reportlab 开发

flask-reportlab

 

这阵子敲了不少代码,一直敲,一直敲....

突然有点倦了,也很久没有停下来好好回忆下这段时间都干了啥?!

从去年开始学习python3,到现在也半年多了,发现对php的依赖也降低了很多。而近来的开发都是用py来实现,有种越敲越上瘾的感觉。这里不讨论2种语言谁好谁坏,在于运用的人。

就近原则,就说说最近基于Flask & reportlab 开发Website Assessment Report项目。这也是我第一次用Flask框架,之前用bottle框架开发过3个小应用。真心道来,bottle太冰清玉洁了,很多地方都需要你自己去组织,东拼西凑,发现还不如找一个相对成熟点的框架,所以就转移到Flask上来了。其实也因为我的起步是python3.3.2版本,而支持这个版本的框架和扩展相对少很多,遇到问题解决也比较麻烦,一路磕磕碰碰,总算是有所成...

 

开发环境

  • Python 3.3.2
  • Flask 0.10.1
  • reportlab 3.0

Website Assessment Report需要实现的核心功能是根据域名,自动获取域名相关信息、ip信息、服务器是否开启压缩,站点链接分析,以及一些手动管理的综合评估,以及优化建议最终生成pdf报表。

 

开发中遇到的问题

  • 区分前后台模块开发,Flask的蓝图很方便就帮我们解决
  • 数据库访问操作是用flask_sqlalchemy
  • 域名信息和ip信息,采用的是多接口查询,而万网的接口有查询频率限制,而其他有些接口不能查询hk域名信息,虽然网上很多查询接口,能用的不多,有些还需要验证码,根本就不符合我们的抓取情况。所以就分成hk,和非hk类型查询;ip信息类似,也是做成多接口方式。
  • 链接分析,检测死链接,和出现死链接源地址,以及链接统计
  • reportlab生成PDF文件,这个比较坎坷,中文乱码,不换行,中英混合等问题
#解决中文乱码
import re
from reportlab.pdfbase import pdfmetrics
from reportlab.platypus import Paragraph,SimpleDocTemplate
from reportlab.lib.styles import ParagraphStyle
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
pdfmetrics.registerFont(UnicodeCIDFont('MSung-Light'))

#正则匹配中文字符
def zh_cn_content(str):
	return re.sub(r'([\u4E00-\u9FFF]+)',
    	lambda m: '%s' % m.group(0),
    	str)

#段落style
ps = ParagraphStyle('ps')
ps.fontSize = 16
#中文换行
ps.wordWrap = 'CJK'
#line-height设置
#PS.leading = 18

content = zh_cn_content('中文 and english')
p = Paragraph(content,ps)
story = [p]
doc = SimpleDocTemplate('hello.pdf')
doc.build(story)

reportlab生成表格的时候,表格位置(y,x),基于表格的左上角的那个点为参考,水平方向是x轴,垂直是y轴,从0开始计算。

生成的pdf需要每一页都有页眉,这个时候你就需要用到SimpleDocTemplate,在doc.build()的时候,添加onFirstPage和onLaterPages监听事件。

-留言评论-

  • 留言载入中...

-拍砖-

 

首页|前端技术|编程/php|生活|关于我

Copyright © 2012 wmhfly.com