1

RequestHandlerあるサブクラスから別のサブクラスにリクエストの処理を内部的に渡す方法はありますか? 基本的に、私がやりたいことは、(のサブクラスである) のgetメソッドから、リクエストを処理するタスクを別のハンドラー ( のサブクラス) にディスパッチすることです。その名前は、データストアからフェッチされた値によって決定されます (私はGAEを使用していますが、それはこの問題とは関係ありません)。コードは次のようになります。RequestHandlerRequestHandlerRequestHandler

class Dispatcher(RequestHandler):
    def get_handler(some_id):
        handler_name = get_handler_name(some_id) # fetches from datastore/etc.
        return getattr(my_module, handler_name)

    def get(self, some_id, *args, **kwargs):
        handler = get_handler(some_id) # e.g., handler could be a HandlerA

        # Not a real function, just to describe what to do:
        # invokes get method of HandlerA (if handler == HandlerA)
        dispatch_to_handler(handler, self, *args, **kwargs) 

    def post(self, some_id):
        handler = get_handler(some_id)

        dispatch_to_handler(....) # dispatches to post method of the handler


class HandlerA(RequestHandler):
    def get(self, *args, **kwargs):
        do_stuff()

    def post(...):
        do_post_stuff()

大きな問題は、要求、応答、セッション、認証、およびその他のデータが含まれているselfため、位置引数とキーワード引数を他のハンドラー (この例では HandlerA) に渡す必要があることです。 be) は、リクエストを処理するために必要です。selfHandlerA

4

1 に答える 1

2

このようにしてみてください:

def get(self, some_id, *args, **kwargs)
    handler_cls = get_handler(some_id)
    handler = handler_cls(self.request, self.response)
    return handler.dispatch()
于 2013-02-09T15:20:45.877 に答える