2011-10-21 27 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