2011-10-21 30 views
2

我想在龙卷风上实现某种API,我有这样的问题: 是否有可能将两个网址路由到一个处理程序分离的方法。路由2网址到1处理程序

class Handler(): 
    def get(self): 
     #only for the first url 
    def post(self): 
     #only for the secornd url 
handlers = [ 
    (r"/url1",Handler), #only GET are allowed 
    (r"/url2",Handler), #only POST are allowed 
] 

因此,如果有人试图发送POST到第一URL中他应该会看到错误消息

回答

2

实现你想要做的一种方法是在你的url中使用正则表达式并检查你的方法处理程序中的属性。

URL的实例映射

url_patterns = [ 
    # here we want to map url1 url2 and url 
    (r"/url([1|2])/", OneAndTwoHandler), 
] 

而相应的处理程序

class OneAndTwoHandler(CustomRequestHandler): 
    def get(self, my_param, *args, **kwargs): 
     if my_param == '2': 
      raise HTTPError(405) 
     # code for only the first url here... 

    def post(self, entry, *args, **kwargs): 
     if my_param == '1': 
      raise HTTPError(405) 
     # code for only the first url here... 

我会映射“my_param”选项字典让事情变得清晰,避免了我潜水的例子如果我需要更改这些值或如果我想添加新的网址,请将其添加到处理程序中。

my_dict_urls = { 
    'get': (1,2,3,4), 
    'post': (3,5) 
} 

if int(my_param) not in my_dict_urls.get('get'): 
    # ... 
6

您可以使用@ ee_vin的答案做到这一点。但是,在这种情况下,为什么不创建两个处理程序?这是简单得多:

class OneHandler(): 
    def get(self): 
     #only for the first url 

class TwoHandler(): 
    def post(self): 
     #only for the second url 

handlers = [ 
    (r"/url1",OneHandler), #only GET are allowed 
    (r"/url2",TwoHandler), #only POST are allowed 
] 

任何人都张贴到第一URL或获得第二会得到不支持错误的方法。

+0

谢谢我现在用这个 – lwolf