Heim > Artikel > Backend-Entwicklung > Ausführliche Erläuterung der Verwendung von Decorator durch Python zur automatischen Registrierung des Tornado-Routings
Erste Version
In dieser Version wird zuerst das RouterConfig-Objekt erstellt, und sein Konstruktor erstellt tornado.web.Application()
und weist es self.Application
zu. Fügen Sie auf jedem Handler das Dekorator, der dem Routenobjekt unter RouterConfig entspricht, wird dem Handler-Parameter zugewiesen. Schließlich wird die entsprechende Beziehung zwischen der URL und dem Handler zur Routing-Tabelle hinzugefügt . @app.route
#!/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()
Die zweite Version
Erstellen Sie das Route-Objekt und fügen Sie es dann dem hinzu Handler Decorator und übergeben Sie die URL, die dem URL-Parameter in der @route(r'/')
-Methode entspricht, und fügen Sie dann die Routenkorrespondenz in Form von Vorfahren zur Liste hinzu. Nachdem alle Routen hinzugefügt wurden, erstellen Sie Tornado Es gibt Objekte unterwegs, dann wird die Routing-Tabelle eingefügt und schließlich ist die Registrierung abgeschlossen. __call__
#!/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()
Die dritte Version
Diese Version ist auch die Version, die ich jetzt verwende. Prinzip Trotzdem besteht die Funktion hier darin, das Tornado-Routing-Objekt zu erben#!/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()
Test
das obige In der Version sind die Testmethode und die Ausgabe gleich. Sie können das Anforderungsmodul verwenden, um HTTP-Anfragen zu simulieren>>> import requests >>> requests.get('http://127.0.0.1:8000/').text 'Hello, 安生' >>> requests.get('http://127.0.0.1:8000/hi').text 'hi, 安生'Mehr Python verwendet automatisch Dekoratoren. Bitte beachten Sie die chinesische PHP-Website für verwandte Artikel zur Registrierung von Tornado-Routing!