Flask基础(09)-->请求勾子函数

什么是请求勾子?

为了让每个视图函数避免编写重复的功能代码,flask提供了通用设施的功能,就是所谓的勾子

那么请求勾子就是,在浏览器请求服务器资源的前后挂载相关的处理函数

请求勾子有什么作用?

作用:在浏览器请求服务器资源的前后挂载相关的处理函数

比如:1、浏览器请求资源之前,根据需求进行权限校验

   2、请求结束之后,处理数据的交互格式......

如何使用请求勾子?

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

  • before_first_request
    在处理第一个请求前执行
  • before_request
    在每次请求前执行
    如果在某修饰的函数中返回了一个相应,视图函数将不再被调用
  • after_request
    如果没有抛出错误,在每次请求后执行
    接收一个参数:视图函数做出的响应,
    在此函数中可以 对响应的值在返回之前做最后的一步修改处理
    需要将参数中的响应在此参数中进行返回
  • teardown_request
    在每次请求后执行
    接收一个参数:错误信息,如果有相关错误抛

总结:请求勾子类似于装饰器,可以在不修改函数内部的逻辑前提下增加逻辑.

from flask import Flask
app = Flask(__name__)


class Config(object):
    DEBUG = True


app.config.from_object(Config)

@app.before_first_request
def before_first_request():
    """第一次请求视图函数时才会调用"""
    print("before_first_request")

@app.before_request
def before_request():
    """每次请求视图函数之前会调用此函数"""
    print("before_request")

@app.after_request
def after_request(response):
    """在请求之后会调用,并且在函数里会接受一个参数:响应,并且还要将响应返回"""
    print("after_request")
    print(response)
    # response可以得到视图函数返回的相关响应数据:<Response 14 bytes [200 OK]>
    # 在此函数中可以对响应的数据做统一的处理
    return  response

@app.teardown_request
def teardown_request(error):
    """在请求之后会执行,如果请求的函数有异常,会把具体的异常传递到此函数"""
    print("teardown_request")

@app.route('/')
def hello_world():
    return 'Hello World!!!'


if __name__ == '__main__':
    app.run()
原文地址:https://www.cnblogs.com/888888CN/p/9474908.html