-->

调度从一个webapp2.RequestHandler到另一个(Dispatching from o

2019-10-17 17:03发布

有没有办法在内部传递从一个请求的处理RequestHandler子类到另一个? 基本上,我想要做的是,从get一个的方法RequestHandler (当然,的一个子类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 (或任何处理程序而定),以处理该请求的需要。

Answer 1:

试着这样说:

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


文章来源: Dispatching from one webapp2.RequestHandler to another