国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python用裝飾器自動注冊Tornado路由詳解

2020-02-23 04:22:42
字體:
來源:轉載
供稿:網友

第一個版本

在這個版本中,首先創建了 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/9import tornadoimport tornado.webimport tornado.ioloopclass RouterConfig: def __init__(self):  self.Application = tornado.web.Application() # 創建路由對象 def route(self, handler):  self.Application.add_handlers('.*$', [(handler.URL, handler)]) # 路有關系映射添加到路由表中app = RouterConfig() # 創建路由@app.routeclass MainHandler(tornado.web.RequestHandler): URL = r'/' def get(self, *args, **kwargs):  self.write('Hello, 安生')@app.routeclass 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/9import 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 cls  return registerroute = 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/9import tornado.webimport tornado.ioloopclass 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 registerapp = 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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 四川省| 龙陵县| 永安市| 玉树县| 武宁县| 奇台县| 化德县| 杭锦后旗| 农安县| 谷城县| 汝城县| 茂名市| 永春县| 清丰县| 肇州县| 绥化市| 丹凤县| 句容市| 温宿县| 彭阳县| 平邑县| 久治县| 精河县| 遵义县| 临泽县| 岱山县| 建阳市| 克山县| 昌江| 包头市| 乌苏市| 汉川市| 健康| 安塞县| 新野县| 毕节市| 平凉市| 商水县| 镇安县| 和林格尔县| 红安县|