第一个版本

在这个版本中,首先创建了 RouterConfig 对象,其构造方法创建了 tornado.web.Application() 并赋值为 self.Application ,在每个 Handler 上添加 @app.route 装饰器,对应的就是 RouterConfig 下面的 route 对象,其中 Handler 实例会被赋值到 handler 参数中,最后把 URL 和 Handler 对应关系添加到路由表中, URL 在每个 Handler 中创建的属性。
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Created by 安生 on 2017/2/9
import tornado
import tornado.web
import tornado.ioloop
class RouterConfig:
def __init__(self):
self.Application = tornado.web.Application() # 创建路由对象
def route(self, handler):
self.Application.add_handlers('.*$', [(handler.URL, handler)]) # 路有关系映射添加到路由表中
app = RouterConfig() # 创建路由
@app.route
class MainHandler(tornado.web.RequestHandler):
URL = r'/'
def get(self, *args, **kwargs):
self.write('Hello, 安生')
@app.route
class MainHandler(tornado.web.RequestHandler):
URL = r'/hi'
def get(self, *args, **kwargs):
self.write('hi, 安生')
if __name__ == "__main__":
app.Application.listen(8000)
print("http://127.0.0.1:8000/")
tornado.ioloop.IOLoop.instance().start()
第二个版本
创建 Route 对象,然后再 Handler 上加上装饰器 @route(r'/') ,并把 URL 传递进来,其中对应到 __call__ 方法中的 url 参数,然后把路由对应关系以元祖的方式添加到列表中,待所有的路由都添加完成之后,创建Tornado的路有对象,然后把路由表放进去,最后完成注册。
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Created by 安生 on 2017/2/9
import tornado.ioloop
import tornado.web
class 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 cls
return register
route = Route() # 创建路由表对象
@route(r'/')
class MainHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.write('Hello, 安生')
@route(r'/hi')
class MainHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.write('hi, 安生')
application = tornado.web.Application(route.urls) # 创建app,并且把路有关系放入到Application对象中
if __name__ == '__main__':
application.listen(8000)
print("http://127.0.0.1:%s/" % 8000)
tornado.ioloop.IOLoop.instance().start()
第三个版本
这个版本也是我现在在使用版本,原理都一样,这里的特点就是继承Tornado路由对象
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Created by 安生 on 2017/2/9
import tornado.web
import tornado.ioloop
class RouterConfig(tornado.web.Application):
""" 重置Tornado自带的路有对象 """
def route(self, url):
"""
:param url: URL地址
:return: 注册路由关系对应表的装饰器
"""
def register(handler):
"""
:param handler: URL对应的Handler
:return: Handler
"""
self.add_handlers(".*$", [(url, handler)]) # URL和Handler对应关系添加到路由表中
return handler
return register
app = RouterConfig(cookie_secret='ulb7bEIZmwpV545Z') # 创建Tornado路由对象,默认路由表为空
@app.route(r'/')
class MainHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.write('Hello, 安生')
@app.route(r'/hi')
class MainHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.write('hi, 安生')
if __name__ == "__main__":
app.listen(8000)
print("http://127.0.0.1:%s/" % 8000)
tornado.ioloop.IOLoop.instance().start()
测试
以上一个版本中,测试方法及输出都是一样的,可以用 requests 模块模拟HTTP请求
>>> import requests
>>> requests.get('http://127.0.0.1:8000/').text
'Hello, 安生'
>>> requests.get('http://127.0.0.1:8000/hi').text
'hi, 安生'
总结
以上就是关于使用装饰器自动注册Tornado路由的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# tornado
# 装饰器
# python
# tornado路由
# Tornado Application的实现
# Tornado路由与Application的实现
# 路由表
# 元祖
# 在这个
# 第一个
# 我现在
# 列表中
# 可以用
# 在每个
# 第二个
# 然后再
# 自带
# 第三个
# 并把
# 值为
# 上加
# 为空
# 象中
# 组中
# 包含了
# 是一样的
相关文章:
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站三合一如何选?哪家性价比更高?
如何快速使用云服务器搭建个人网站?
宿州网站制作公司兴策,安徽省低保查询网站?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
,巨量百应是干嘛的?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
c# 在ASP.NET Core中管理和取消后台任务
如何在景安云服务器上绑定域名并配置虚拟主机?
如何挑选高效建站主机与优质域名?
如何确认建站备案号应放置的具体位置?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
如何用免费手机建站系统零基础打造专业网站?
网站制作的步骤包括,正确网址格式怎么写?
建站之星客服服务时间及联系方式如何?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何在万网开始建站?分步指南解析
官网网站制作腾讯审核要多久,联想路由器newifi官网
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
活动邀请函制作网站有哪些,活动邀请函文案?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
如何在Windows虚拟主机上快速搭建网站?
招贴海报怎么做,什么是海报招贴?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
制作门户网站的参考文献在哪,小说网站怎么建立?
建站主机空间推荐 高性价比配置与快速部署方案解析
小建面朝正北,A点实际方位是否存在偏差?
,在苏州找工作,上哪个网站比较好?
建站之星伪静态规则如何设置?
如何彻底卸载建站之星软件?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何挑选最适合建站的高性能VPS主机?
如何通过.red域名打造高辨识度品牌网站?
香港服务器租用每月最低只需15元?
制作网站怎么制作,*游戏网站怎么搭建?
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何在阿里云通过域名搭建网站?
建站主机如何安装配置?新手必看操作指南
如何设计高效校园网站?
如何通过建站之星自助学习解决操作问题?
如何选择最佳自助建站系统?快速指南解析优劣
如何在建站之星网店版论坛获取技术支持?
在线制作视频网站免费,都有哪些好的动漫网站?
建站之星价格显示格式升级,你的预算足够吗?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何在橙子建站上传落地页?操作指南详解
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
,怎么在广州志愿者网站注册?
*请认真填写需求信息,我们会在24小时内与您取得联系。