全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

python用装饰器自动注册Tornado路由详解

第一个版本

在这个版本中,首先创建了 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小时内与您取得联系。