python 은 장식 기로 Tornado 루트 를 자동 으로 등록 합 니 다.

첫 번 째 버 전.
이 버 전에 서 먼저 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/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()
두 번 째 버 전.
Route 대상 을 만 든 다음 Handler 에 장식 기@route(r'/')  ,URL 을 전달 합 니 다.그 중에서__call__ 방법 에 대응 하 는 url 매개 변 수 를 전달 한 다음 에 경로 에 대응 하 는 관 계 를 원조 적 인 방식 으로 목록 에 추가 하고 모든 경로 가 추 가 된 후에 Tornado 의 길 을 만 드 는 대상 이 있 습 니 다.그리고 경로 표를 넣 고 마지막 에 등록 을 마 쳤 습 니 다.

#!/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()
세 번 째 버 전.
이 버 전도 제 가 지금 사용 하고 있 는 버 전 입 니 다.원리 가 똑 같 습 니 다.여기 서 특징 은 Tornado 경로 의 대상 을 계승 하 는 것 입 니 다.

#!/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()
테스트
상기 버 전에 서 테스트 방법 과 출력 은 모두 같 습 니 다.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 경로 의 모든 내용 을 자동 으로 등록 하 는 것 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

좋은 웹페이지 즐겨찾기