【问题标题】:Python Tornado Request Handler MappingPython Tornado 请求处理程序映射
【发布时间】:2011-12-28 00:34:27
【问题描述】:

我刚开始使用 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>")
    

【问题讨论】:

    标签: python wsgi tornado web.py


    【解决方案1】:

    您不限于在 url 匹配中仅列出一次 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)]
    

    或者您可以说“任何以“产品”开头的 URL 都应该发送给产品处理程序,如下所示:

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

    并在 ProductHandler 中自己解析变量列表。

    【讨论】:

    • 如果我使用模式/products/list/(.*),我从哪里获取变量列表?
    • 您可以定义您的处理程序以接受args 参数,然后根据需要进行解析。捕获的模式(即 /products/ 之后的任何内容)将以 args 的形式提供
    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    相关资源
    最近更新 更多