Сопоставление обработчика запросов Python Tornado - PullRequest
0 голосов
/ 28 декабря 2011

Я только начинаю работать с Tornado, и мне было интересно, как я могу определить отображение так, чтобы все запросы, как показано ниже, обрабатывались одним обработчиком.

  1. / products / list
  2. / products / find / 123
  3. / products / copy / 123
  4. / products / {action} / {аргумент1} / {аргумент2} / {аргумент3}

    class Application(tornado.web.Application):
        def __init__(self):
            handlers = [
                (r"/", home.HomeHandler),
                (r"/products/", product.ProductHandler)]
    
    class ProductHandler(base.BaseHandler):   
      def get(self, action, *args):
              self.write("Action:" + action + "<br>")
                    for arg in args:
                        self.write("argument:" + arg + "<br>")
    

1 Ответ

1 голос
/ 28 декабря 2011

Вы не ограничены перечислением RequestHandler только один раз в сопоставлении URL, поэтому вы можете сделать одну из двух вещей: Добавить шаблон, явно соответствующий каждому из шаблонов, упомянутых выше, следующим образом:

def __init__(self):
    handlers = [
        (r"/", home.HomeHandler),
        (r"/products/list/([0-9]+)", product.ProductHandler)
        (r"/products/find/([0-9]+)", product.ProductHandler)
        (r"/products/copy/([0-9]+)", product.ProductHandler)
        (r"/products/(\w+)/(\w+)/(\w+)", product.ProductHandler)]

Или вы можете сказать, что «любой URL, начинающийся с« products », должен быть отправлен в обработчик продукта», например:

def __init__(self):
    handlers = [
        (r"/", home.HomeHandler),
        (r"/products/list/(.*)", product.ProductHandler)

и проанализируйте список переменных самостоятельно в ProductHandler.

...