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'
第一次请求控制台输出:
第二次请求控制台输出:
下面是请求钩子的一些常见应用场景:
before_first_request
:第一个请求之前运行,可以进行一些 Web 程序的初始化操作before_request
:每次请求之前运行,可以进行数据库连接的创建操作、用户的权限校验操作等after_request
:我们经常在视图函数中进行数据库操作,比如更新、插入,之后需要将更改提交到数据库中,提交更改的代码就可以放到after_request
钩子注册的函数中teardown_request
:可以接收视图函数的异常,一般用来记录错误日志
注意: 每个请求钩子可以注册任意多个处理函数,函数名也并不是必须和钩子名称相同。如果有多个 before_request,执行顺序从上往下;after_request 接收一个响应对象,并且返回同一个或者更新后的响应对象,多个 after_request 执行顺序是从下往上。
来源:https://juejin.cn/post/7030956915853099016


猜你喜欢
- Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。Django 为这些数据库提
- 当1980年Three Rivers公司第一次推出图形用户界面Perq,产生GUI这个概念的时候,不知道他们有没有想过今天图形界面设计竟然会
- 使用方法:terminal中输入python weather.py http://www.weather.com.cn/weather/10
- 前言在上一篇文章PyG搭建GCN前的准备:了解PyG中的数据格式中,大致了解了PyG中的数据格式,这篇文章主要是简单搭建GCN来实现节点分类
- 在深度学习中,如果我们想获得某一个层上的feature map,就像下面的图这样,怎么做呢?我们的代码是使用keras写的VGG16网络,网
- 记录一下微信支付整个流程1.公众号申请及配置流程使用微信支付的前提是必须要有公众号。 申请链接: 微信公众号申请.记得选择服务号,根据操作提
- python之标准库htmlhtml库是用于解析HTML的一个工具,是python自带的标准库之一。html库位置:__init__.py文
- 本文实例讲述了python在windows命令行下输出彩色文字的方法。分享给大家供大家参考。具体分析如下:默认情况下python在控制台输出
- 这篇文章主要介绍了python异常处理try except过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 在上一篇文章中,我们讲了如何在linux上用python写一个守护进程。主要原理是利用linux的fork函数来创建一个进程,然后退出父进程
- 闲言少叙,本文主要是想介绍一个Golang开发常见的一个问题。然而,此问题对于初学者来说却经常容易陷入坑中。问题我在写一段代码时,使用了Go
- 前言众所周知我们获取的第一手数据往往都是比较杂乱无章的,这些文件保存一般都是csv文件或者是excel文件,读取转换成DataFrame还有
- 如何开始 C#学习过程中有一集讲的是如何查看类图,看完视频后自己就学习如何在VS 2019中查看类图,但是找了好长时间都没有找到查看类图这
- 有时我们会碰到类似下面这样的 unicode 字符串:u'\xe4\xbd\xa0\xe5\xa5\xbd'这明显不是一个正
- 前言:tkinter提供了3种布局管理方式:1、pack2、grid3、place每种布局管理器都非常有用,根据不同的需求,选择对应的布局方
- 网页的圆角处理,其实最开始的九宫格的表格处理是挺方便的,只是现在都不用表格布局了,自然就被非法取缔了。呵呵。微软的有VML画圆角,由于只是它
- 1. 功能说明,在页面使用smarty循环100次输出,类似for循环100次{section name=total loop=100}{$
- Python 通过pip安装Django详细介绍经过前面的 Python 包管理工具的学习,接下来我们就要基于前面的知识,来配置 Djang
- Vue动态创建组件实例并挂载到body方式一import Vue from 'vue'/** * @param Compon
- 一、数据集爬取现在的深度学习对数据集量的需求越来越大了,也有了许多现成的数据集可供大家查找下载,但是如果你只是想要做一下深度学习的实例以此熟