class Router(object): def default_dispatcher(self, request, response): """Dispatches a handler. :param request: A :class:`Request` instance. :param response: A :class:`Response` instance. :raises: ``exc.HTTPNotFound`` if no route matched or ``exc.HTTPMethodNotAllowed`` if a route matched but the HTTP method was not allowed. :returns: The returned value from the handler. """ route, args, kwargs = rv = self.match(request) request.route, request.route_args, request.route_kwargs = rv if route.handler_adapter is None: handler = route.handler if isinstance(handler, basestring): if handler not in self.handlers: self.handlers[handler] = handler = import_string(handler) else: handler = self.handlers[handler] #找到合适的handler caller(adapter) # 所谓的handler适配器,面对的情况是: # 可能有多个handler,并且每个handler的handle过程不相同。 # 适配器负责选择handler进行调用它,按照其相应过程。 route.handler_adapter = self.adapt(handler) # route保存了handle adapter(其实就是保存了一个handler,及使用该handler的方法) return route.handler_adapter(request, response)