2011-10-21 8 views
2

私は竜巻にAPIを実装しようとしていますが、そのような質問があります。 メソッドごとに1つのハンドラに2つのURLをルーティングできます。2つのURLを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 
] 

もしそうなら、彼はあなたがこれを行うにはee_vinの答え@使用することができ、エラーメッセージ

答えて

2

あなたがしたいことを達成するための1つの方法は、あなたのURLにregexを使い、あなたのメソッドハンドラの属性をチェックすることです。

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... 

の一例をマッピングするためのURL

例私は明確なものを維持し、ダイビングに私を避けるために、辞書に「my_param」オプションをマップしますこれらの値を変更する必要がある場合、または新しいURLを追加したい場合は、ハンドラに追加します。

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

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

を見るべき最初のURLにPOSTを送信しようとしている誰か。しかし、この状況では、なぜ2つのハンドラを作成しないのですか?それははるかに簡単です:

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に投稿するか、2番目の方法で取得すると、サポートされていないエラーが発生します。

+0

ありがとう私は今これを使用しています – lwolf

関連する問題