Flask  请求钩子的实现

作者:tigeriaf 时间:2022-04-25 21:21:12 

在 Web 应用中,有时需要在响应请求前或者响应请求后做一些处理,为了让每个视图函数避免编写重复功能的代码,Flask 提供了请求钩子,它们可以用来注册在请求处理的不同阶段执行的处理函数,我们就可以轻易的对请求进行预处理和后处理。

Flask 常用请求钩子如下:

  • before_first_request:在处理第一个请求之前运行

  • before_request:在每次请求之前运行,如果没有未处理的异常抛出,会在每个请求结束后运行

  • after_request:如果没有未处理的异常抛出,在每次请求结束后运行

  • teardown_request:即使有未处理的异常抛出,也会在每个请求结束后运行

这些请求钩子是使用装饰器方式实现,用法也非常简单,使用起来和app.route()装饰器基本相同。下面使用这些请求钩子装饰一些函数,用于在每次请求前后做一些处理,为了方便理解,只是单纯打印一句话。


@app.before_first_request

def before_first_request():

print('before_first_request')

@app.before_request

def before_request():

print('before_request')

@app.after_request

def after_request(response):

print('after_request')

return response

@app.teardown_request

def teardown_request(e):

print('teardown_request')

@app.route('/test')

def test():

return 'test'

第一次请求控制台输出:

Flask  请求钩子的实现

第二次请求控制台输出:

Flask  请求钩子的实现

下面是请求钩子的一些常见应用场景:

  • before_first_request:第一个请求之前运行,可以进行一些 Web 程序的初始化操作

  • before_request:每次请求之前运行,可以进行数据库连接的创建操作、用户的权限校验操作等

  • after_request:我们经常在视图函数中进行数据库操作,比如更新、插入,之后需要将更改提交到数据库中,提交更改的代码就可以放到 after_request 钩子注册的函数中

  • teardown_request:可以接收视图函数的异常,一般用来记录错误日志

注意: 每个请求钩子可以注册任意多个处理函数,函数名也并不是必须和钩子名称相同。如果有多个 before_request,执行顺序从上往下;after_request 接收一个响应对象,并且返回同一个或者更新后的响应对象,多个 after_request 执行顺序是从下往上。

来源:https://juejin.cn/post/7030956915853099016

标签:Flask,请求钩子,实现
0
投稿

猜你喜欢

  • Prometheus开发中间件Exporter过程详解

    2023-04-18 16:14:13
  • python分布式计算dispy的使用详解

    2021-01-14 09:15:24
  • Python实现模拟时钟代码推荐

    2023-08-03 05:26:09
  • Python使用Cv2模块识别验证码的操作方法

    2022-07-03 14:37:19
  • Python实现复制图片到指定文件夹并按顺序重新命名

    2022-04-25 18:53:06
  • python信号量,条件变量和事件详解

    2021-10-06 18:14:23
  • python中parser.add_argument()用法实例(命令行选项、参数和子命令解析器)

    2022-06-09 03:54:43
  • python txt中的文件,逐行读取并且每行赋值给变量问题

    2021-04-28 21:12:02
  • Python Pandas学习之基本数据操作详解

    2021-11-07 17:46:56
  • python输出小数精度控制的方法

    2021-07-18 16:35:26
  • Python爬虫基础之简单说一下scrapy的框架结构

    2022-01-04 23:19:00
  • Python基础中的的if-else语句详解

    2023-03-14 16:05:23
  • Java+mysql本地图片上传数据库及下载示例

    2023-07-23 19:49:13
  • 如何解决tensorflow恢复模型的特定值时出错

    2023-12-22 14:59:36
  • Python开发的十个小贴士和技巧及长常犯错误

    2023-12-09 10:55:50
  • python 基本结构语句(函数和模块)

    2023-06-14 00:37:56
  • Python本地及虚拟解释器配置过程解析

    2022-12-05 09:08:09
  • PHPExcel冻结(锁定)表头的简单实现方法

    2023-08-18 02:35:21
  • Oracle9i取得建表和索引的DDL语句

    2010-07-20 12:59:00
  • Python+Seaborn绘制分布图的示例详解

    2021-08-14 16:51:29
  • asp之家 网络编程 m.aspxhome.com