怎么说呢,python可以算是救了我一命的一门语言,若不是他,恐怕公司的这个项目还遥遥无期,我会始终保有对他最崇高的敬意。
这里,我仅列出自己最近使用的几个库,并简单演示一下其高超的使用效率。
1.jinja2
简介:一个模板替换类,衍生于django的Template,在很多地方做了加强。
中文支持:模板文件的内容以及render传入的数据,如果含有多字节编码,则必须要先进行decode,渲染之后的结果也是经过decode的。
备注:jinja2在renderXML等格式的文件的时候,不会自动替换html标签,这点有时候是好事~~,因为我并不用jinjia直接来往前台吐页面。
使用:
使用方法很简单:

也支持不定函数变量的传递:

输出为:

2.simplejson/自带json
简介:一个把python数据结构和json互相转化的类
中文支持:
支持,但是当需要dumps的数据中含有unicode字符的时候,需要指定ensure_ascii = False,如下:

在dumps的时候,无论obj是否进行了decode都可以,但是当loads之后,则字符串一定被自动decode了
备注:无
使用:

输出结果如下:

3.BeautifulSoup
简介:一个非常与众不同的解析HTML/XML的类库,用起来非常快捷,方便
中文支持:很好,在soup里面拿到的中文都是经过decode过的
备注:本博的糗事百科的vim插件就是用它来解析的html
使用:
假设待解析的数据如下(存在data中):

代码如下:

4.minidom
简介:生成XML的工具
中文支持:支持,但是需要如下注意:

  • 1.minidom的设置属性的方法是setAttribute,提供两个参数,一个属性名,一个属性值。之前在文章中介绍过,即当两个字符串相连时,encode/decode必须一致。
  • 2.当minidom输出时,如果想指定xml头的encode为utf-8,可以如下写:
  • 但是这里的要求就是,如果指定了encoding,那么传入minidom的字符串都应该decode成对应encoding的。而且这样toprettyxml输出的结果是encode过的。

备注:无
使用:

OK,这几个工具可以说涵盖了web开发中常用的几种交互方式,HTML/XML,json,模板替换,使用起来如鱼得水啊~


最近又发现了一个生成XML的更好的库,pyfo.
提供了python数据结构到XML的直接转化,并且对中文支持非常好。其测试代码tutorial.py中有详细使用说明。
需要注意的就是,测试代码没有说明属性的生成,其实每一行XML在pyfo中对应的是一个tuple(或list):

其中name须为str,data基本可以为所有类型,attr必须为dict。
所以只要如下写:

即可生成XML代码:

暂无相关产品

15则回应给“关于使用python开发web应用的几个库总结”

  1. Dante说道:

    最近又发现了一个生成XML的更好的库,pyfo.
    http://pypi.python.org/pypi/pyfo/0.6
    提供了python数据结构到XML的直接转化,并且对中文支持非常好。其测试代码tutorial.py中有详细使用说明。
    需要注意的就是,测试代码没有说明属性的生成,其实每一行XML在pyfo中对应的是一个tuple(或list):
    (name,data,attr)
    其中name须为str,data基本可以为所有类型,attr必须为dict。
    所以只要如下写:
    (‘attr’, 1,{’1′:1,’2′:2})
    即可生成XML代码:
    <attr 1=”1″ 2=”2″>1</attr>

    [回复]

    依云 回复:

    貌似和那个json模块一样方便啊。有空再试,希望能顺利支持Python3,祈祷ing….

    [回复]

    Dante 回复:

    哈,用起来确实感觉不错,不过没试过是不是支持Python3……

    [回复]

  2. nsdy说道:

    。。 一直在使用C++
    说实话 一直想要学习gtk和python 总是感觉无从下手阿…

    [回复]

    wlb5396340 回复:

    http://www.tuxradar.com/python
    这个网站关于python和gtk的文章很好,还有视频演示

    [回复]

    nsdy 回复:

    谢了 兄弟

    [回复]

  3. Insion说道:

    如果要在一个模板中引包含另一个子模板的时候,这个子模板中有中文就会提示UnicodeDecodeError
    UnicodeDecodeError: ‘utf8′ codec can’t decode byte 0xca in position 572: invalid continuation byte,请问下这样要怎么处理才可以包含有中文的模板而不会出错呢?

    [回复]

    Dante 回复:

    模板是utf8的格式吗?用的是jinja2?

    [回复]

    lxneng 回复:

    我的文件是utf8的格式,但是也出现了UnicodeDecodeError错误
    设置了
    reload(sys)
    sys.setdefaultencoding(‘utf-8′)
    就出下面的错误
    UnicodeDecodeError: ‘utf8′ codec can’t decode byte 0×92 in position 53: unexpected code byte

    去掉就出现
    UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0×92 in position 53: ordinal not in range(128)

    [回复]

    Dante 回复:

    传入的中文参数必须是解码过的,比如 u’中国’,这样。

    [回复]

    lxneng 回复:

    解决了 是要给sqlalchemy的连接指定为charset =utf8

    谢谢

    [回复]

    lxneng 回复:

    我也遇到这样的问题, 请问你是怎么解决的?

    [回复]

  4. Insion说道:

    是jinja2,我现在用的flask会自动把jinja2也安装上去作为它的模板来用的。

    上面说那个问题我已经解决了,是因为文件实际的编码不是utf8,另存一下就没事了。

    但是用jinja2的话,在肯定模板是utf8编码的前提下通过用语句去包含我的子模板(其实就是我的网站的通用的头部),输出的时候头部会多出一两个换行(浏览器的HTML代码里貌似看不到BR换行符、应该是硬回车),导致css的排版会向下移动一两行的距离,后来我试下用web.py去写了一个模板去测试,发觉web.py的模板可以很好的显示出原来设计的页面。后来我就在flask下用mako去做模板,也没有问题,就是不明白,为什么套在jinja2里后会出现页面向下位移一两行的问题(可以render出页面),后来才发现只要一用include去包含其他模板就会这样,不知道你试过这样的问题没有?求解中~

    [回复]

    Dante 回复:

    嗯,好像确实有时候会多出来几行,不过因为对展示没有影响,所以一般都没管。。。。

    [回复]

  5. Insion说道:

    UI的设计差之毫厘谬之千里,原来jinja2这个问题不是我一个人遇到,jinja2没解决这个问题前都不会考虑用它了,现在使用的是mako。

    [回复]

发表评论