有时候我们需要对请求进行预处理(preprocessing)和后处理(postprocessing),这时可以使用Flask提供的一些请求钩子(Hook)。它们可以用来注册在请求处理的不同阶段执行的处理函数(或称回调函数,即Callback)。这些请求钩子使用装饰器实现,通过程序实例app调用,用法很简单:以before_request钩子(请求之前)为例,当你对一个函数附加了app.before_request装饰器后,就会将这个函数注册为before_request处理函数,每次执行请求前都会触发所有before_request处理函数。Flask默认实现的五种请求钩子如下:
before_first_request # 注册一个函数,在处理第一个请求前运行
before_request # 注册一个函数,在处理每个请求前运行
after_request # 注册一个函数,如果没有未处理的异常抛出,会在每个请求结束后运行
teardown_request # 注册一个函数,即使有未处理的异常抛出,会在每个请求结束后运行。如果发生异常,会传入异常对象作为参数到注册的函数中
after_this_request # 在视图内注册一个函数,会在这个请求结束后运行
before_first_request:在程序中,运行程序前我们需要进行一些程序的初始化操作,比如创建数据库表,添加管理员用户。这些工作可以放到before_first_request装饰器注册的函数中。
before_request:比如网站上要记录用户最后在线时间,可以通过用户最后发送请求时间来实现。为了避免在每个视图函数都添加更新在线时间的代码,我们可以仅在使用before_request钩子注册的函数中调用这段代码。
after_request:我们经常在视图函数中进行数据库操作,比如更新插入等,之后需要将更改提交到数据库中。提交更改的代码就可以放到after_request钩子注册的函数中。
0 Comments latest
No comments.