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中的is和id用法分析
Jan 26 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
python django生成迁移文件的实例
Aug 31 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
python实现连连看游戏
Feb 14 Python
jupyter notebook 写代码自动补全的实现
Nov 02 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
php 获取远程网页内容的函数
2009/09/08 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
JavaScript中的"=、==、==="区别讲解
2019/01/22 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
python制作填词游戏步骤详解
2019/05/05 Python
python实现日志按天分割
2019/07/22 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
python集合的新增元素方法整理
2020/12/07 Python
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
廉政教育心得体会
2014/01/01 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
会计的岗位职责
2014/03/15 职场文书
星级党支部申报材料
2014/05/31 职场文书
公司会议开幕词
2015/01/29 职场文书
整改通知书格式
2015/04/22 职场文书
大学生读书笔记范文
2015/07/01 职场文书
小学思想品德教学反思
2016/02/24 职场文书
python如何读取.mtx文件
2021/04/22 Python