从一个webapp2.RequestHandler调度到另一个

时间:2013-02-09 13:44:44

标签: python webapp2

有没有办法在内部将请求从一个RequestHandler子类传递给另一个get子类?基本上,我想要做的是,从RequestHandler的{​​{1}}方法(嗯,RequestHandler的子类),将处理请求的任务分配给另一个处理程序(子类) RequestHandler),其名称由从数据存储区获取的值确定(我正在使用GAE,但这与此问题无关)。代码看起来像这样:

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),因为self包含请求,响应,会话,身份验证和其他数据,HandlerA(或处理程序可能是什么)需要处理请求。

1 个答案:

答案 0 :(得分:2)

以这种方式尝试:

def get(self, some_id, *args, **kwargs)
    handler_cls = get_handler(some_id)
    handler = handler_cls(self.request, self.response)
    return handler.dispatch()