2011-12-28 172 views
0

我剛剛開始使用Tornado,我在想如何定義一個映射,以便像下面的所有請求都由一個處理程序處理。Python龍捲風請求處理程序映射

  1. /產品/列表
  2. /產品/發現/ 123
  3. /產品/複印/ 123
  4. /產品/ {行動}/{參數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

你不限在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中自己解析變量列表。

+0

如果我使用模式/products/list/(.*),我從哪裏獲取變量列表? – newbie 2011-12-28 06:01:37

+0

您可以定義您的處理程序以接受'args'參數,然後根據需要進行解析。捕獲的模式(即/ products /之後的任何內容)將以'args'的形式提供 – jknupp 2011-12-28 06:42:09