Maison > développement back-end > Tutoriel Python > Explication détaillée de la façon d'enregistrer Tornado auprès du décorateur

Explication détaillée de la façon d'enregistrer Tornado auprès du décorateur

Y2J
Libérer: 2017-05-10 11:49:28
original
1478 Les gens l'ont consulté

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()
Copier après la connexion

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()
Copier après la connexion

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()
Copier après la connexion

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, 安生'
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal