Pectin 简单说明

Pectin 是我一个小小的项目,目的是给Tornado 添加一些实用而必要的特性,这些简单的东西我猜已经被人完成过几十上百遍了,不过独立出来成为一个轮子就能方便一些。鉴于有人发邮件来问了,我就稍微的说明一下这个小东西。搭配上项目中本来的说明例子

是什么?

Pectin (果胶)的意思是“胶合层”,而且是很薄的一层胶合层。功能上基本上是通过给Tornado 的类重写方法来实现的。

具体来说,只需要利用Python 的多重继承,应用一些Mixin 就可以实现,也就是说Pectin 其实算是类似“插件”或者“补丁”的一类东西。

能干什么?

Pectin 的功能非常少:

  • Template 自然是将Tornado 默认的网页模板渲染器换成Python 中名气最大的Jinja 2;
  • Media 做的事情是添加了另一个静态文件路径(可以是./media)用来存放用户上传的文件,将Static 和Media 分开,就像Django那样;
  • Form 做的事情很少,可以将表单自动传入Handler,以及对表单验证的一些简化。

怎么用?

因为功能之间的完全没有耦合,所以三个功能都可以看作三个插件,每个都能单独拿来使用,如果只希望将默认的模板渲染器换成Jinja 2 ,那么只需要分别在Application 和所有Handler 的继承列表里面加入TemplateApplicationMixinTemplateMixin,或者不喜欢某个功能,只需要从继承列表里面去掉就行了。

Template

只需要将相关的Mixin 加入到你的class 里面就好了,接下来就正常使用。

Media

添加到class 了以后,要注意必须在Application 中设置存放Media 的文件夹的路径media_path

在这之后就可以在模板中用media_url函数来像static_url一样获取文件路径了。

另外要注意的是,因为media 要在模板的context 中添加media_url,所以如果同时使用Template 和Media 功能,那么在Handler 的多重继承的列表中MeidaMixin 的必须放在TemplateMixin 的前面

Form

能在Tornado 中更漂亮的处理WTForms 表单。你先正常的用pectin.forms.Forms 定义表单。注意pectin.forms.field 提供了一些HTML 5 表单类,这都是从flask-wtf 项目复制过来的,感谢。

然后可以将这些表单放到你的Handler 的formset 这个列表里面,然后你就可以不用传入任何东西,直接去渲染模板了,这些表单会自动的传递给模板引擎,你只用在模板中访问forms 这个字典就可以获取表单了,key 是相应表单的类名。

而在接受数据的method 中,可以直接用self.getform() 获取表单,这个方法会自动对表单进行验证(可以关掉),如果验证不通过会触发一个异常。具体用法建议直接看代码

还有什么?

Pectin 一开始其实是从自己另一个项目,Hanger 中分离出来的,在Hanger 中我希望弄出一个强大的框架能快速搭建网站,但是因为自己水平不够和太臃肿的原因无法进行下去,于是分离出了Pectin ,让其仅仅有最少最基本的功能。

我现在还在尝试基于Pectin 重新实现一个用来简化Web 编程的网站模板,名叫Cellwall,希望能将Tornado 的“最佳实现”弄出来,不过现在只是一个雏形而已。

Pectin 简单说明》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注