第一部分 请求调度
前面说过, 程序实例通过路由来处理请求——路由就是URL和视图函数的映射。
那么我们如何查看Flask程序中的URL映射?
我们可以看到我们使用app.route修饰器定义的两个路由。 中间那个映射是Flask添加的特殊路由, 用于访问静态文件, 详情见第三章。
括号里的HEAD, OPTIONS, GET是请求方法, 这样不同的请求方法发送给相同的URL时就会调用不同的视图函数进行处理。前两个方法由Flask自动处理, 因此可以说在这个程序中URL映射中的三个路由都是用GET方法。 第四章会详细介绍为何为路由指定不同的请求方法。
不同的请求方法发送给相同的URL时就会调用不同的视图函数进行处理图解:
put index1()
根url:'/' 路由 get index2()
其他方法 index3()
第二部分 请求钩子
在处理请求之前或之后执行代码会很有用, 但是在每个视图函数中都添加重复代码不是一个好方法。
Flask提供了注册通用函数的功能, 注册的函数可在请求被发送到视图函数之前或者之后调用。
如何注册请求钩子(通用函数), 使用修饰器实现:
1.before_first_request: 注册一函数, 在处理第一个请求之前运行。
2.before_request: 在每次请求之前运行。
3.after_request: 如果没有未处理的异常抛出, 在每次请求之后运行。
4.teardown_request: 即使有未处理异常抛出, 也在每次请求之后运行。
请求钩子函数和视图函数共享数据一般用我们上节提到的程序上下文提供的g变量。 例如:
before_request处理程序可以从数据库加载已登录用户, 并保存到g.user中。 随后调用视图函数时, 视图函数再使用g.user获取用户。
(钩子用法后续还会讲解, 现在不理解不用担心.)