Flask依赖和启动流程回顾 (2)

继续往后看,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 要做的就是找到我们的处理函数,并返回调用的结果,也就是路由的过程

def dispatch_request(self): ......省略..... return self.view_functions[rule.endpoint](**req.view_args)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzzyf.html