Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erklärung, wie man Tornado beim Dekorateur registriert

Ausführliche Erklärung, wie man Tornado beim Dekorateur registriert

Y2J
Y2JOriginal
2017-05-10 11:49:281438Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung von Dekoratoren zum automatischen Registrieren von Tornado-Routen vorgestellt. Der Artikel bietet drei Versionen von Lösungen, auf die wir uns unten beziehen können.

Erste Version

In dieser Version wird zuerst das RouterConfig-Objekt und seine Konstruktormethode erstellt tornado.web.Application() und weisen Sie self.Application den Wert zu, fügen Sie den @app.route -Dekorator für jeden Handler hinzu, der dem Routenobjekt unter RouterConfig entspricht, wo die Handler-Instanz dem Handler-Parameter zugewiesen wird, und fügen Sie schließlich die entsprechende Beziehung zwischen den hinzu URL und Handler Zur Routing-Tabelle wird die URL mit dem -Attribut in jedem Handler erstellt.

#!/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, fügen Sie dann den Dekorator @route(r'/') zum Handler hinzu und übergeben Sie die URL, die Der URL-Parameter in der Methode und dann die Routing-Korrespondenz in Form von Vorfahren zur Liste hinzufügen. Nachdem alle Routen hinzugefügt wurden, erstellen Sie das Tornado-Pfadobjekt, fügen Sie dann die Routing-Tabelle ein und schließen Sie schließlich die Registrierung ab . 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. Die Funktion hier ist die gleiche:

erbt Tornado-Routing-Objekt

#!/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

In der obigen Version sind die Testmethode und die Ausgabe gleich. Sie können das Anforderungsmodul zum Simulieren verwenden HTTP-Anfragen

>>> import requests
>>> requests.get('http://127.0.0.1:8000/').text
'Hello, 安生'
>>> requests.get('http://127.0.0.1:8000/hi').text
'hi, 安生'

Zusammenfassung

[Verwandte Empfehlungen]

1. Kostenloses Python-Video-Tutorial

2.

Python trifft auf Datenerfassungsvideo-Tutorial

3.

Python-Lernhandbuch

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie man Tornado beim Dekorateur registriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn