在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:

    在请求开始时,建立数据库连接;

    在请求开始时,根据需求进行权限校验;

    在请求结束时,指定数据的交互格式;

为了让每个视图函数避免编写重复功能的代码,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框架中勾子函数的使用相关推荐

  1. python处理信号机制_Python的Flask框架中的signals信号机制

    Flask 提供了信号(Signals)功能,是一种消息分发机制.类似于钩子(Hooks).使用信号功能可以降低程序的耦合,分解复杂的业务模型.例如在更新了产品数据后,可以发送一个信号.当有需要对产品 ...

  2. Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块...

    Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...

  3. flask框架中的Jinja2模板引擎

    简介 在flask框架中通常使用Jinja2模板引擎来实现复杂页面的渲染. 本章主要介绍Jinja2模板引擎的基本结构和使用方法. 如何使用flask框架渲染模板 在模板中传递一个或者多个参数 if语 ...

  4. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  5. python flask框架下登录注册界面_Python的Flask框架中实现简单的登录功能的教程

    Python 的 Flask 框架中实现简单的登录功能的教程 , 登录是各个 web 框架中的基础功能 , 需要的朋友可以参考下 回顾 在前面的系列章节中, 我们创建了一个数据库并且学着用用户和邮件来 ...

  6. TP框架中S函数使用方法

    TP框架中S函数使用步骤: //初始化 type为缓存方式;prefix为缓存前缀标示,也就是名字;expire为生存周期  //我这里设置缓存方式为xcache,名字ticket,周期7100秒 c ...

  7. Imagepy图像处理框架中neighbors函数的探索之旅

    Imagepy图像处理框架中neighbors函数的探索之旅 https://github.com/Image-Py 一.探索函数 1.1 neighbors函数 1.2 结果早知 def neigh ...

  8. 关于Flask框架中启动Scrapy爬虫框架时的几种问题的解决

    最近开发的爬虫调度系统是由Flask框架提供接口,在Flask中启动Scrapy项目,开发期间遇到了几个问题,网上找找,自己也琢磨了好久,终于顺利解决.问题如下: 一.Scrapy.crawl指令找不 ...

  9. python函数库app_Python的Flask框架中@app.route的用法教程

    在我上一篇文章,我搭了一个框架,模拟了Flask网站上"@app.route('/')"第一条例子的行为. 如果你错过了那篇"这不是魔法",请点击这里. 在这篇 ...

最新文章

  1. golang中base64编码_MySQL中如何将字符串转为base64编码?
  2. 一种医学图像分割的新思路【nnU-Net网络配置教程】
  3. com+组件日志记录(log4net)
  4. exe解包和重新打包_pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇
  5. python车辆轨迹分析_Ngsim数据集分析与python处理,NGSIM,解析,及
  6. 常见移动机器人运动学模型总结(图片版)
  7. cve-2017-0199metasploit复现过程
  8. java图书管理系统源码免费_Java图书管理系统 附源码
  9. MiniTable 可单选/取消单选.
  10. 认清自我,不在迷茫!2019个人年终总结!
  11. 差速轮和舵轮的纯跟踪算法
  12. 微信小游戏加载图片失败问题
  13. 【JQuery】关于jQuery的load方法在Laravel里的使用
  14. 黑马程序员-黑马程序员训练营基础测试
  15. 平淡生活:戴戒指的学问
  16. 个人计算机的基本配置显卡,计算机最基本配置之一显卡bios是怎样设置的?
  17. linux下修改或删除包含乱码、特殊符号等文件名的文件
  18. android搜狗互联网链接,完美适配Android5.0搜狗手机浏览器上线
  19. 开环传递函数频率特性
  20. 中国市场上30个伪意大利品牌名单

热门文章

  1. vue click同时传入事件对象和自定义参数
  2. 图论 Make Unique:有向图和无向图的一些算法
  3. spring-data-jpa Specification构建动态ql
  4. 求两个数的最大公约数的3种办法
  5. Git 最佳实践:分支管理
  6. 《大话设计模式》6个原则 转帖
  7. Ubuntu创始人谈Windows 7、Chrome OS
  8. 小苏打到底能不能碱化尿液
  9. Hive的六种UDF完整实例与使用方法汇总
  10. 流计算程序不报错,但是没有输出的一些原因(持续更新中)