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を返す。

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

Pocket

Comments are closed.