跬步 On Coding

Django自定义User类

参考

Substituting a custom User model
django(v1.5) 自定义用户基础

实现

Django forum,学习Django了,准备写一个论坛,想法是实现一个如 http://f2e.im/ 这样的现代论坛,数据驱动开发,第一步就是设计数据库表结构,Django自带了用户模块,但是定义的字段太少,所以需要自定义扩展下。

settings.py下新增自定义用户类:

RSS Factory的坑

花了一天时间把RSS Factory更新了下,把Tornado默认的模版引擎换为jinja2,解析html第三方库换为lxml。遇到了几个坑,纪录下。

自动转义

Tornado默认的模版引擎默认自动转义,Flask配置的jinja2也自动转义了,在Tornado中使用jinja2模版引擎的简单方法,按照这个方法模版渲染的时候却没有自动转义,所以还需要进一步配置。

application = tornado.web.Application(
template_loader=JinjaLoader(os.path.join(os.path.dirname(__file__), 'templates/'),
    autoescape=True, extensions=['jinja2.ext.autoescape']),
)

使用lxml处理DOM

参考

前言

RSS Factory本来使用BeautifulSoup来解析xml,html。但是发现还有更好的第三份库lxml性能更好,使用更方便。

在Tornado中使用jinja2模版引擎的简单方法

参考

实现

为了让自己的开发工具都能得到统一,所以想着以后不管是用Tornado也好,Bottle也好,模版引擎都开始用jinja2,所以更新了RSS Factory使用的模版引擎。

Google了下Tornado使用jinja2的方法,发现大部分人的实现方法都是重写ReaquestHandlerender方法,这样的虽然比较简单但是不利于保持Tornado的完整性,所以我使用参考文章中的方法。

WSGI与Tornado想到的

Tornado

上周用tornado实现了RSS Factory,又从新学了下Tornado下的使用,再次看introduce to tornado发现以前看的只学到了Tornado的MVC,使用Tornado也只停留在表面,没有学到Tornado的精髓。这次又学到了不少,这里总结下。

长连接,WebSocket与异步事件循环

Web2.0时代产生了很多的实时通知需求,也就是Ajax请求特别多,最初是用轮询实现,但是对服务器的开销很大,所以产生了长连接轮询。

客户的也就是浏览器请求一个api,Tornado不会立即返回,而是等到有变化的时候返回,浏览器获取响应后,循环再请求api,这样就省掉了很多请求,而且实现了实时通知。