Cet article présente principalement Python pour utiliser des décorateurs pour enregistrer automatiquement les itinéraires Tornado. L'article propose trois versions de solutions. Les amis dans le besoin peuvent s'y référer ci-dessous.
Première version
Dans cette version, l'objet RouterConfig est d'abord créé, et sa méthode constructeur est créée tornado.web.Application()
et attribuez la valeur à self.Application
, ajoutez le décorateur @app.route
sur chaque Handler, qui correspond à l'objet route sous RouterConfig, où l'instance du Handler sera affectée au paramètre handler, et enfin ajoutez la relation correspondante entre le URL et gestionnaire Pour la table de routage, l'URL est créée avec l'attribut dans chaque gestionnaire.
#!/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()
La deuxième version
Créez l'objet Route, puis ajoutez le décorateur @route(r'/')
au Handler, et transmettez l'URL, qui correspond à call
Le paramètre url dans la méthode, puis ajoutez la correspondance de routage à la liste sous forme d'ancêtres, une fois toutes les routes ajoutées, créez l'objet chemin Tornado, puis placez-y la table de routage, et enfin terminez l'enregistrement. .
#!/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()
La troisième version
Cette version est également la version que j'utilise actuellement. Les principes sont les mêmes. La fonctionnalité ici est que hérite. Objet Tornado Routing
#!/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
Dans la version ci-dessus, la méthode de test et la sortie sont les mêmes. Vous pouvez utiliser le module de requêtes pour simuler. Requêtes HTTP
>>> import requests >>> requests.get('http://127.0.0.1:8000/').text 'Hello, 安生' >>> requests.get('http://127.0.0.1:8000/hi').text 'hi, 安生'
Résumé
[Recommandations associées]
1 Tutoriel vidéo gratuit Python
2. Tutoriel vidéo sur la rencontre entre Python et la collecte de données
3 Manuel d'apprentissage Python
.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!