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)
webapp2源码笔记
最新推荐文章于 2024-06-21 17:02:49 发布