2011-12-28 6 views
0

私はちょうどTornadoを使い始めていますが、私は以下のようなすべてのリクエストが1つのハンドラで処理されるようにマッピングをどのように定義できるのでしょうか?Python Tornadoリクエストハンドラマッピング

  1. /製品/リスト
  2. /製品/検索/ 123
  3. /製品/コピー/
  4. 123 /製品/ {アクション}/{引数1}/{の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

あなたは限定されるものではなく、明示的にそうように上記言及パターンの各パターンマッチングを追加します:

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」と言うことができますが、2つのいずれかを行うことができますので、一度だけURLマッチングでのRequestHandlerを一覧表示します

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

と解析ProductHandler内の変数のリストを自分:それはそうのような製品のハンドラに送信されなければならない「製品」、」で始まります。

+0

私はパターン/products/list/(.*)を使用する場合、どこから変数リストを取得しますか? – newbie

+0

ハンドラーを定義して、 'args'パラメーターを受け入れ、必要に応じて解析することができます。キャプチャされたパターン(つまり、/ products /の後にあるもの)は、 'args'として利用できます。 – jknupp