继续往后看,full_dsipatch_request的代码如下:
def full_dispatch_request(self): """Dispatches the request and on top of that performs request pre and postprocessing as well as HTTP exception catching and error handling. """ self.try_trigger_before_first_request_functions() try: request_started.send(self) rv = self.preprocess_request() if rv is None: rv = self.dispatch_request() except Exception as e: rv = self.handle_user_exception(e) return self.finalize_request(rv)这段代码最核心的内容是 dispatch_request,加上请求的 hooks 处理和错误处理的内容。
self.dispatch_request()返回的是处理函数的返回结果(比如 hello world 例子中返回的字符串),finalize_request 会把它转换成 Response 对象
在 dispatch_request 之前我们看到 reprocess_request,之后看到 finalize_request,它们里面包括了请求处理之前和处理之后的很多 hooks 。这些 hooks 包括:
第一次请求处理之前的 hook 函数,通过 before_first_request定义
每个请求处理之前的 hook 函数,通过 before_request定义
每个请求正常处理之后的 hook 函数,通过 after_request 定义
不管请求是否异常都要执行的 teardown_request hook 函数
dispatch_request 要做的就是找到我们的处理函数,并返回调用的结果,也就是路由的过程