Tornado还提供了多应用程序路由对象---tornado.web.url.这个对象可以让我们更加系统化的管理路由模块,比如创建一个简单的tornado服务
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
param1 = self.get_arguments('param1')[0]
param2 = self.get_arguments('param2')[0]
host=self.request.headers.get('Cookie')
print(host)
print(param1)
print(param2)
self.write(str(param1)+str(param2))
class UserHandler(tornado.web.RequestHandler):
def get(self):
self.write('首页')
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
(r"/user/", UserHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8881)
tornado.ioloop.IOLoop.current().start()
上述代码中的web.Application对象会传入一个列表对象参数,分别对应首页模块和用户模块,现在这种情况看起来还不错。
如果服务中方法个数有10个或者更多个呢?这个时候就不建议写在一个文件里面了,因为代码不易维护且显得很臃肿,可以考虑将方法分文件处理。tornado.web.url可以为我们提供在多个文件中注册路由的功能,类似插线板,我们最终只需将这一个或多个插线板插导主线路(main.py)即可
比如服务中有一个用户模块user.py,通过tornado.web.url可以对其路由进行注册,如下所示:
app/t1.py
from tornado.web import url
import tornado.web
class UserHandler(tornado.web.RequestHandler):
def get(self):
self.write('首页')
urlpatterns = [
url('/user/',UserHandler)
]
main.py
import tornado.ioloop
import tornado.web
from app import t1
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write('不开心')
urlpatterns = [
(r"/",MainHandler),
]
urlpatterns += (t1.urlpatterns)
#创建tornado实例
application = tornado.web.Application(urlpatterns,debug=True)
if __name__ == '__main__':
application.listen(8001)
tornado.ioloop.IOLoop.instance().start()