flask框架中勾子函数的使用详解


Posted in Python onAugust 01, 2018

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

  • 在请求开始时,建立数据库连接;
  • 在请求开始时,根据需求进行权限校验;
  • 在请求结束时,指定数据的交互格式;

为了让每个视图函数避免编写重复功能的代码,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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
更改Python命令行交互提示符的方法
Jan 14 Python
Python验证码识别处理实例
Dec 28 Python
Python 列表理解及使用方法
Oct 27 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
Python socket聊天脚本代码实例
Jan 02 Python
基于python3生成标签云代码解析
Feb 18 Python
Python使用configparser库读取配置文件
Feb 22 Python
jupyter notebook oepncv 显示一张图像的实现
Apr 24 Python
python如何正确使用yield
May 21 Python
python迷宫问题深度优先遍历实例
Jun 20 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
flask中过滤器的使用详解
Aug 01 #Python
Python拼接微信好友头像大图的实现方法
Aug 01 #Python
Python Flask前后端Ajax交互的方法示例
Jul 31 #Python
Python常见内置高效率函数用法示例
Jul 31 #Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 #Python
flask-socketio实现WebSocket的方法
Jul 31 #Python
深入flask之异步非堵塞实现代码示例
Jul 31 #Python
You might like
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
php之字符串变相相减的代码
2007/03/19 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
xtree.js 代码
2007/03/13 Javascript
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
bootstrapvalidator之API学习教程
2017/06/29 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
Python使用三种方法实现PCA算法
2017/12/12 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
利用python爬取有道词典的方法
2020/12/08 Python
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
自荐信要包含哪些内容
2013/11/06 职场文书
办公文员的工作岗位职责
2013/11/12 职场文书
房产委托公证书
2014/04/08 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
档案信息化建设方案
2014/05/16 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang