2011-10-12 87 views
12

Tôi đang cố gắng tìm hiểu cách triển khai URL có tối đa 3 tham số url (tùy chọn).Tôi làm cách nào để triển khai nhiều thông số URL trong một tuyến đường Tornado?

Tôi đã tìm ra cách thực hiện điều này trong ASP.NET MVC 3, nhưng những hạn chế của dự án hiện tại đã loại bỏ nó. Vì vậy, đây là những gì tôi đang tìm kiếm:

base/{param1}/{param2}/{param3} nơi param2 và param3 là tùy chọn. Đây có phải chỉ đơn giản là một mẫu regex trong phần handlers?

Trả lời

32

Tôi không chắc chắn nếu có một đẹp cách để làm điều đó, nhưng điều này sẽ làm việc:

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

lớn, cảm ơn. tôi sẽ thử nó! – swasheck

Các vấn đề liên quan