2011-10-12 17 views
12

我試圖找出如何實現一個URL最多3(可選)URL參數。如何在Tornado路線中實現多個URL參數?

我想出如何在ASP.NET MVC 3做到這一點,但目前項目的約束消除它。所以,這就是我正在尋找:

base/{param1}/{param2}/{param3},其中參數2和參數3是可選的。這只是handlers部分中的正則表達式模式嗎?

回答

32

我不知道如果有一個很好的方式做到這一點,但這應該工作:

import tornado.web 
import tornado.httpserver 

class TestParamsHandler(tornado.web.RequestHandler): 
    def get(self, param1, param2, param3): 
     param2 = param2 if param2 else 'default2' 
     param3 = param3 if param3 else 'default3' 
     self.write(
      { 
       'param1': param1, 
       'param2': param2, 
       'param3': param3 
      } 
     ) 

# My initial answer is above, but I think the following is better. 
class TestParamsHandler2(tornado.web.RequestHandler): 
    def get(self, **params): 
     self.write(params) 


application = tornado.web.Application([ 
    (r"/test1/(?P<param1>[^\/]+)/?(?P<param2>[^\/]+)?/?(?P<param3>[^\/]+)?", TestParamsHandler), 
    (r"/test2/(?P<param1>[^\/]+)/?(?P<param2>[^\/]+)?/?(?P<param3>[^\/]+)?", TestParamsHandler2) 
]) 
http_server = tornado.httpserver.HTTPServer(application) 
http_server.listen(8080) 
tornado.ioloop.IOLoop.instance().start() 
+0

很好,謝謝。我會試試看! – swasheck