flask框架中勾子函数的使用
在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:
在请求开始时,建立数据库连接;
在请求开始时,根据需求进行权限校验;
在请求结束时,指定数据的交互格式;
为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。
请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:
- before_first_request
- 在处理第一个请求前执行
- before_request
- 在每次请求前执行
- 如果在某修饰的函数中返回了一个响应,视图函数将不再被调用
- after_request
- 如果没有抛出错误,在每次请求后执行
- 接受一个参数:视图函数作出的响应
- 在此函数中可以对响应值在返回之前做最后一步修改处理
- 需要将参数中的响应在此参数中进行返回
- teardown_request
- 在每次请求后执行
- 接受一个参数:错误信息,如果有相关错误抛出
代码测试
from flask import Flask
from flask import abort app = Flask(__name__) # 在第一次请求之前调用,可以在此方法内部做一些初始化操作 @app.before_first_request def before_first_request(): print("before_first_request") # 在每一次请求之前调用,这时候已经有请求了,可能在这个方法里面做请求的校验 # 如果请求的校验不成功,可以直接在此方法中进行响应,直接return之后那么就不会执行视图函数 @app.before_request def before_request(): print("before_request") # if 请求不符合条件: # return "laowang" # 在执行完视图函数之后会调用,并且会把视图函数所生成的响应传入,可以在此方法中对响应做最后一步统一的处理 @app.after_request def after_request(response): print("after_request") response.headers["Content-Type"] = "application/json" return response # 请每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息 @app.teardown_request def teardown_request(e): print("teardown_request") @app.route('/') def index(): return 'index' if __name__ == '__main__': app.run(debug=True)
- 在第1次请求时的打印:
before_first_request
before_request
after_request
teardown_request
- 在第2次请求时的打印:
before_request
after_request
teardown_request
转载于:https://www.cnblogs.com/skaarl/p/9397299.html
flask框架中勾子函数的使用相关推荐
- python处理信号机制_Python的Flask框架中的signals信号机制
Flask 提供了信号(Signals)功能,是一种消息分发机制.类似于钩子(Hooks).使用信号功能可以降低程序的耦合,分解复杂的业务模型.例如在更新了产品数据后,可以发送一个信号.当有需要对产品 ...
- Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块...
Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...
- flask框架中的Jinja2模板引擎
简介 在flask框架中通常使用Jinja2模板引擎来实现复杂页面的渲染. 本章主要介绍Jinja2模板引擎的基本结构和使用方法. 如何使用flask框架渲染模板 在模板中传递一个或者多个参数 if语 ...
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
- python flask框架下登录注册界面_Python的Flask框架中实现简单的登录功能的教程
Python 的 Flask 框架中实现简单的登录功能的教程 , 登录是各个 web 框架中的基础功能 , 需要的朋友可以参考下 回顾 在前面的系列章节中, 我们创建了一个数据库并且学着用用户和邮件来 ...
- TP框架中S函数使用方法
TP框架中S函数使用步骤: //初始化 type为缓存方式;prefix为缓存前缀标示,也就是名字;expire为生存周期 //我这里设置缓存方式为xcache,名字ticket,周期7100秒 c ...
- Imagepy图像处理框架中neighbors函数的探索之旅
Imagepy图像处理框架中neighbors函数的探索之旅 https://github.com/Image-Py 一.探索函数 1.1 neighbors函数 1.2 结果早知 def neigh ...
- 关于Flask框架中启动Scrapy爬虫框架时的几种问题的解决
最近开发的爬虫调度系统是由Flask框架提供接口,在Flask中启动Scrapy项目,开发期间遇到了几个问题,网上找找,自己也琢磨了好久,终于顺利解决.问题如下: 一.Scrapy.crawl指令找不 ...
- python函数库app_Python的Flask框架中@app.route的用法教程
在我上一篇文章,我搭了一个框架,模拟了Flask网站上"@app.route('/')"第一条例子的行为. 如果你错过了那篇"这不是魔法",请点击这里. 在这篇 ...
最新文章
- golang中base64编码_MySQL中如何将字符串转为base64编码?
- 一种医学图像分割的新思路【nnU-Net网络配置教程】
- com+组件日志记录(log4net)
- exe解包和重新打包_pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇
- python车辆轨迹分析_Ngsim数据集分析与python处理,NGSIM,解析,及
- 常见移动机器人运动学模型总结(图片版)
- cve-2017-0199metasploit复现过程
- java图书管理系统源码免费_Java图书管理系统 附源码
- MiniTable 可单选/取消单选.
- 认清自我,不在迷茫!2019个人年终总结!
- 差速轮和舵轮的纯跟踪算法
- 微信小游戏加载图片失败问题
- 【JQuery】关于jQuery的load方法在Laravel里的使用
- 黑马程序员-黑马程序员训练营基础测试
- 平淡生活:戴戒指的学问
- 个人计算机的基本配置显卡,计算机最基本配置之一显卡bios是怎样设置的?
- linux下修改或删除包含乱码、特殊符号等文件名的文件
- android搜狗互联网链接,完美适配Android5.0搜狗手机浏览器上线
- 开环传递函数频率特性
- 中国市场上30个伪意大利品牌名单