Python Tornado 请求处理器映射

0 投票
1 回答
1928 浏览
提问于 2025-04-17 09:06

我刚开始学习Tornado框架,想知道怎么设置一个规则,让下面这些请求都能由同一个处理器来处理。

  1. /products/list
  2. /products/find/123
  3. /products/copy/123
  4. /products/{action}/{argument1}/{argument2}/{argument3}

    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

你在设置网址匹配的时候,并不是只能列出一次请求处理器(RequestHandler),所以你可以选择两种方式来处理:

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)]

第一种是明确列出每一个你提到的模式,比如这样:

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

第二种方式是说“任何以‘products’开头的网址都应该交给产品处理器来处理”,像这样:

然后你可以在产品处理器(ProductHandler)里自己解析这些变量列表。

撰写回答