tornado使用操作指南—模型
前言
在Web开发中,路由的配置定义可以类似Django中urls.py文件这样定义,也可以类似Flask中通过装饰器的形式来定义。当然不同的配置方式都有各自的优势。在Tornado中默认的路由方式的定义如同Django中urls.py文件中的定义格式。如下将修改Tornado的路由定义格式,将采用装饰器的格式来定义路由。
1. 思路
Tornado默认路由文件配置:
app = tornado.web.Application(handlers=[(r'/index/', IndexHandler),])
Tornado修改默认的路由配置文件:
@route(r'/index/')def IndexHandler(tornado.web.RequestHandler):def get(self):pass
2. 修改路由定义
创建 Route 对象,然后再在 Handler 上加上装饰器 @route(r’/‘) ,并把 URL 传递进来,其中对应到 call 方法中的 url 参数,然后把路由对应关系以元祖的方式添加到列表中,待所有的路由都添加完成之后,创建Tornado的路有对象,然后把路由表放进去,最后完成注册。
实现代码如下:
import tornado.ioloopimport tornado.webclass Route(object):""" 把每个URL与Handler的关系保存到一个元组中,然后追加到列表内,列表内包含了所有的Handler """def __init__(self):# 路由列表self.urls = list()def __call__(self, url, *args, **kwargs):def register(cls):# 把路由的对应关系表添加到路由列表中self.urls.append((url, cls))return clsreturn registerroute = Route() # 创建路由表对象@route(r'/')class Main1Handler(tornado.web.RequestHandler):def get(self, *args, **kwargs):self.write('Hello main1')@route(r'/hi')class Main2Handler(tornado.web.RequestHandler):def get(self, *args, **kwargs):self.write('hello main2')def make_app():# 创建app,并且把路有关系放入到Application对象中return tornado.web.Application(route.urls)if __name__ == '__main__':app = make_app()app.listen(8000)tornado.ioloop.IOLoop.instance().start()
