Tornado 不同于 Flask 其中之一就是路由的配置,有感于 Tornado 路由配置方式的不方便,决定实现与 Flask 一样的装饰器路由,其实网上已经有人实现了,详细 猛戳此处

大概看了下,略显复杂啊,于是自己想了想有以下代码:


#!/usr/bin/env python
#coding: utf-8

import tornado.ioloop
import tornado.web


class Route(object):
    def __init__(self):
        self.url_list = list()

    def __call__(self, url):
        def _(cls):
            self.url_list.append((url, cls))

            return cls

        return _

route = Route()


@route('/')
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('hello world')


application = tornado.web.Application(route.url_list)


if __name__ == '__main__':
    application.listen(9997)
    tornado.ioloop.IOLoop.instance().start()

思路很简单,就是把需要手动配置的 路由信息 用装饰器自动加载到 url_list 中去。

只是个人想法,不知道是否有不妥的地方。