图为从flask中运行hello world的调用栈。
启动流程
run()这个方法的内容非常简单:处理一下参数,然后调用 werkzeug
的 run_simple
。需要注意的是:run_simple
的第三个参数是 self
,也就是创建的 Flask()
application。
self.dispatch_request()
返回的是处理函数的返回结果(比如 hello world 例子中返回的字符串),finalize_request
会把它转换成 Response
对象。
在 dispatch_request
之前我们看到 preprocess_request
,之后看到 finalize_request
,它们里面包括了请求处理之前和处理之后的很多 hooks 。这些 hooks 包括:
- 第一次请求处理之前的 hook 函数,通过
before_first_request
定义 - 每个请求处理之前的 hook 函数,通过
before_request
定义 - 每个请求正常处理之后的 hook 函数,通过
after_request
定义 - 不管请求是否异常都要执行的
teardown_request
hook 函数