0

Google App Engineで自動ルーティングを行うためのエレガントな方法を見つけた人はいますか?私はルートの非常に長いリストになってしまいました、すなわち

urls = routes.HandlerPrefixRoute(h+'index_handler.',[RedirectRoute(r'/',handler='IndexHandler')]),...

example.com/blogが自動的にブログハンドラーにルーティングされ、example.com / blog/methodが自動的にblog.methodメソッドにルーティングされるようにしたいと思います。

4

1 に答える 1

0

webapp2とappengineを使用したルーティングの非常に基本的なソリューションを見つけました。ここでソリューション全体を投稿するつもりはありませんが、誰かがそれを見たいと思っている場合はお知らせください。githubに投稿してリンクを送信します。

基本的には、osを使用してハンドラーディレクトリ内のファイルを取得し、ファイルをループします。

for file in os.listdir(directory):
    if file.endswith(".py") and file != '__init__.py':

非常に単純な命名規則(つまり、file_name = FileName)を使用しているため、ハンドラーディレクトリ内のファイルに基づいて、それぞれのルートを動的に作成できます。

ルーティングする必要のあるメソッドにもデコレータを使用します(つまり、URLハンドラー/メソッドはハンドラーファイルに移動し、HandlerクラスとHandler.Methodが呼び出されます)。したがって、各クラスのすべてのメソッドを取得し、クラスメソッドにデコレータによって作成された属性がある場合は、それをルーティングします。

したがって、次のようなforループ:

methods = inspect.getmembers(handlercls, predicate=inspect.ismethod)
methods = [x[1] for x in methods if hasattr(x[1], 'route')]

for method in methods:
    # Set some kwargs that I can then pass to a route (i.e. handler path, method to call, etc...)

私が言ったように、そしておそらく誰もこの質問に答えなかった理由は、ソリューション全体がかなり長いので、誰かが望むなら、私はそれをGitHubに載せて、おそらく人々は追加/制御することができます。それを改善するためにそれに。

于 2013-03-17T21:19:46.850 に答える