毕业设计的内容涉及到了tornado,现在来总结一些使用中用到的小技巧。
集成常用操作到BaseHandler
在Tornado中有时候会有很多全局的任务,比如连接查询数据库。为了方便可以把数据库查询的任务写成BaseHandler的一个方法,比如下面:
定制使用xsrf安全控制
如果开启xsrf_cookies
后,所有的POST方法的表单都需要提交一个_xsrf
字段的值。不过在Tornado已经内置自动添加这个字段的操作,因此既方便又安全。使用方法是在页面的form中添加两行内容:
|
|
这样在数据提交到后台时,Tornado会自动获取_xsrf字段的值并自动进行比对验证。
这样不需要开发者手动验证很方便,但是如果有这样一个情况,我们要使用一个别人提供的采用POST的服务,无法自动添加这个_xsrf时怎么办呢?
其实方法也很简单,我们只需要在相应的服务处理类中复写一下check_xsrf_cookie
函数就可以了如果写pass
就是不处理。示例如下:
Tornado对WebSocket的跨域验证
Tornado对WebSocket的支持非常好用,但是会对WebSocket的连接进行跨域检查,如果不加处理都会返回错误信息:
对于Tornado 4.0
可以采用复写check_origin
函数的方法:
或者限定域名
|
|
对于tornado 3.0
只能重写Header
的方法来处理:
Tornado异步执行定时任务
之前做微信开发的时候,需要每7000秒刷新下access_token
,本来想用Python的多进程来处理,但是在Windows上的多进程太费事了,因此使用了Tornado内置的一个方法PeriodicCallback
用于处理周期调用。我的使用方法如下:
|
|
使用的时候只用实例化这个类既可以了。由于PeriodicCallback
是周期调用,因此在刚开始的时候需要手动调用一次。之后就会每7000秒执行一次。这个用起来就是time.sleep()的不阻塞版本。