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

首頁 > 編程 > Python > 正文

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

2019-11-25 16:21:25
字體:
來源:轉載
供稿:網友

第一個版本

在這個版本中,首先創建了 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()

測試

以上一個版本中,測試方法及輸出都是一樣的,可以用 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路由的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍山县| 搜索| 临邑县| 宁武县| 河池市| 阿坝| 元阳县| 龙山县| 泊头市| 叙永县| 西贡区| 奉新县| 汨罗市| 腾冲县| 临桂县| 莱州市| 永济市| 嘉鱼县| 民丰县| 静宁县| 井冈山市| 安岳县| 湘西| 宿松县| 昌图县| 手游| 金坛市| 大邑县| 达州市| 江北区| 康保县| 古田县| 叶城县| 淄博市| 噶尔县| 响水县| 忻城县| 大丰市| 金华市| 天门市| 浑源县|