flask中请求钩子介绍

请求钩子作用

请求钩子可以对请求的各个阶段进行监听,方便开发者针对请求完成一些统一处理,以便减少重复代码,作用类比Django中的中间件

开发中主要会用到以下四种请求钩子:

before_request
每次执行视图函数之前调用
对请求进行一些准备处理
如果在该函数中返回了一个响应,视图函数将不再被调用
after_request
如果没有抛出错误,每次执行视图函数之后(已经包装为响应对象)调用
在此函数中可以对响应值在返回之前做最后一步修改处理
接受一个参数:包装好的响应对象
需要将修改后的响应对象返回
before_first_request
web应用被第一次请求前调用
可以进行web应用初始化处理
teardown_request:
每次执行视图函数之后调用
无论是否出现异常都会执行, 一般用于请求收尾
接受一个参数:错误信息,如果有相关错误抛出

 

from flask import Flask, Response


# 请求钩子: 类比django中间件 ,请求钩子可以对请求的各阶段进行监听, 方便开发者针对请求完成一些统一的处理
app = Flask(__name__)


# 每次执行视图函数之前调用, 对请求进行一些准备处理, 如参数解析, 黑名单过滤, 数据统计等
@app.before_request
def prepare():
print('before_request')


# 每次执行视图函数之后(已经包装为响应对象)调用, 对响应进行一些加工处理, 如设置统一响应头, 设置数据的外层包装
@app.after_request
def process(response:Response): # 必须定义形参接收响应对象
print('after_request')

请求钩子可以通过两种方式进行添加, 装饰器形式 或者 直接方法调用
from flask import Flask, Response


app = Flask(__name__)


# 每次执行视图函数之前调用
# @app.before_request
# def prepare():
# print('before_request')

# 另一种语法
def prepare():
print('before_request')

app.before_request(prepare)


@app.route('/')
def index():
print('执行视图')
a = 1 / 0
return "index"


if __name__ == '__main__':
  app.run()

  

原文地址:https://www.cnblogs.com/wwr3569/p/13735900.html