当前位置: 首页 > news >正文

flask之请求钩子

请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:

1、before_first_request: 在第一次请求处理之前先被执行

2、before_request: 在每次请求前执行

3、after_request: 在每次请求处理之后被执行

  • 接受一个参数:视图函数的响应
  • 在此函数中可以对响应值在返回之前做最后一步修改处理
  • 需要将参数中的响应在此参数中进行返回
    4、teardown_request: 在每次请求后执行
  • 接受一个参数:错误信息,即服务器出错的信息, 没有错误则为 None
  • 需要在非调式模式下运行
#coding=utf-8from flask import Flaskapp = Flask(__name__)@app.route("/testA")
def index1():return 'welcome hello'@app.route("/testB")
def index2():a = str(1 / 0)return a@app.before_first_request  #在第一次请求处理之前先被执行
def handle_before_first_request():print("before_first_request called")@app.before_request  #在每次请求处理之前都被执行
def handle_before_request():print("before_request called")@app.after_request  #在每次请求处理之后被执行
def handle_after_request(response001):print("after_request called")print(response001)return response001@app.teardown_request  #在每次请求处理之后都被执行,有没有异常都执行
def handle_teardown_request(error001):"""工作在非调试模式下(生产模式):param: errors: 服务器出错的信息, 没有错误则为 None"""print("teardown_request called")print(error001)if __name__ == "__main__":app.run()

分析:
1、第一次访问http://127.0.0.1:5000/testA,控制台输出:

before_first_request called #第一次服务请求前执行结果
before_request called #每次服务请求前执行结果
after_request called #每次请求后执行结果,返回视图函数的响应内容,如下<Response 13 bytes [200 OK]>
<Response 13 bytes [200 OK]>
teardown_request called  #在每次请求后执行结果,没有错误则返回如下None
None

第二次访问http://127.0.0.1:5000/testA,控制台输出:

before_request called #每次服务请求前执行结果
after_request called 每次请求后执行结果 #每次请求后执行结果,返回视图函数的响应内容,如下<Response 13 bytes [200 OK]>
<Response 13 bytes [200 OK]>
teardown_request called  #在每次请求后执行结果,没有错误则返回如下None
None

2、第一次访问http://127.0.0.1:5000/testB

before_first_request called  #第一次服务请求前执行结果
before_request called #每次服务请求前执行结果
after_request called #每次请求后执行结果,返回视图函数的响应内容,如下<Response streamed [500 INTERNAL SERVER ERROR]>
<Response streamed [500 INTERNAL SERVER ERROR]>
teardown_request called  在每次请求后执行结果,返回如下错误信息division by zero
division by zero  #出错信息
http://www.lryc.cn/news/322909.html

相关文章:

  • COPY requires at least two arguments, docker COPY 报错
  • 权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移
  • 【Unity每日一记】unity中的内置宏和条件编译(Unity内置脚本符号)
  • 发现有一个会Python的男友魅力值杠杠的!!!
  • SQL日期函数
  • C语言经典面试题目(二十六)
  • 创建一个electron-vite项目
  • Codeforces Round 935 (Div. 3)A~E
  • ES: spring boot中使用ElasticsearchClient
  • 实体框架EF(Entity Framework)简介
  • 使用CUDA 为Tegra构建OpenCV
  • YoloV8改进策略:BackBone改进|PKINet
  • 如何在Linux系统部署Dupal CMS结合内网穿透实现无公网IP访问web界面
  • 小巧玲珑的SQLite
  • 【Android 内存优化】 native内存泄漏监控方案源码分析
  • 数据结构 二叉树 力扣例题AC——代码以及思路记录
  • Android 11系统启动流程
  • python 爬取杭州小区挂牌均价
  • 数据可视化-ECharts Html项目实战(3)
  • 【理解机器学习算法】之Clustering算法(K-Means)
  • Transformer的前世今生 day02(神经网络语言模型、词向量)
  • 【Linux】多线程编程基础
  • 【地图】腾讯地图 - InfoWindow 自定义信息窗口内容时,内容 html 嵌套混乱问题
  • Vue3、element-plus和Vue2、elementUI的一些转换
  • Go语言gin框架中加载html/css/js等静态资源
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • flask 继续学习
  • DockerFile遇到的坑
  • 并网型风光储微电网日前优化调度(MATLAB实现)
  • MATLAB环境下基于振动信号的轴承状态监测和故障诊断