2010年6月
« 4月   7月 »
 123456
78910111213
14151617181920
21222324252627
282930  

カテゴリー

appengine(python)で動的にメソッドを呼び出して、urlにマッピングする

pythonの動的メソッド呼び出しの方法を使って、
python+appengineで、urlを設定するときに、各urlごとにクラスを作成せずに
クラスの中のメソッド呼び出しを変更する方法。

class OAuth(webapp.RequestHandler):
  def get(self , methodname):
    logging.info(methodname)
    try:
      method = getattr(self, methodname)
    except AttributeError:
      self.response.set_status(404)
      return
    method()

  def aaa(self):
    logging.info("aaa called")
    pass

pagemapping = [('/oauth(.*)',OAuth )
    ]
application = webapp.WSGIApplication(pagemapping, debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

/oauthaaaの時、
aaaのメソッドが呼び出される(pagemappiongのカッコで囲んだ値が、getメソッドの第2引数になる。)。
メソッドが無いときは、404を返す。

ちょっと考えると、プライベートにしときたいから呼び出して欲しくないメソッドが呼ばれちゃうとかあるけど、
そこはまぁ、うまいことやると言うことで。

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>