Flask——请求钩子

2019-05-29  本文已影响0人  Gavininn

在客户端和服务器交互过程中,有些准备工作或者扫尾工作需要处理。比如:
1.在请求开始时,建立数据库连接;
2.在请求开始时,根据需求进行全年校验。
3.在请求你结束时,指定数据的交互格式。

为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设置等功能,即请求钩子

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

在处理第一个请求前执行

2.before_request

在每次请求前执行;如果在某修饰的函数中返回了一个相应,视图函数将不再被调用。

3.after_request

在每次请求后执行(如果没有抛出错误);接收一个参数:视图函数做出的相应,在此函数中可以对响应值在返回之前做最后一步修改处理,需要将参数中的相应在此参数中进行返回。

4.teardown_request

在每次请求后执行;接收一个参数:错误信息,如果有相关错误抛出,需要设置flask的配置DEBUG=False,teardown_request才会接收到异常对象。

from flask import Flask
from settings.dev import DevConfig

app = Flask(__name__)
# 项目配置
app.config.from_object(DevConfig)

@app.before_first_request
def before_first_request():
    print("----before_first_request----")
    print("系统初始化的时候,执行这个钩子方法")
    print("会在接收到第一个客户端请求时,执行这里的代码")

@app.before_request
def before_request():
    print("----before_request----")
    print("每一次接收到客户端请求时,执行这个钩子方法")
    print("一般可以用来判断权限,或者转换路由参数或者预处理客户端请求的数据")

@app.after_request
def after_request(response):
    print("----after_request----")
    print("在处理请求以后,执行这个钩子方法")
    print("一般可以用于记录会员/管理员的操作历史,浏览历史,清理收尾的工作")
    response.headers["Content-Type"] = "application/json"
    # 必须返回response参数
    return response


@app.teardown_request
def teardown_request(exc):
    print("----teardown_request----")
    print("在每一次请求以后,执行这个钩子方法,如果有异常错误,则会传递错误异常对象到当前方法的参数中")
    print(exc)

@app.route("/")
def index():
    print("----视图函数----")
    print("视图函数被运行了")
    return "视图函数被运行了<br>"

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=80)
----before_first_request----
系统初始化的时候,执行这个钩子方法
会在接收到第一个客户端请求时,执行这里的代码
----before_request----
每一次接收到客户端请求时,执行这个钩子方法
一般可以用来判断权限,或者转换路由参数或者预处理客户端请求的数据
----视图函数----
视图函数被运行了
----after_request----
在处理请求以后,执行这个钩子方法
一般可以用于记录会员/管理员的操作历史,浏览历史,清理收尾的工作
----teardown_request----
在每一次请求以后,执行这个钩子方法,如果有异常错误,则会传递错误异常对象到当前方法的参数中
None
----before_request----
127.0.0.1 - - [08/Apr/2019 09:23:53] "GET / HTTP/1.1" 200 -
每一次接收到客户端请求时,执行这个钩子方法
一般可以用来判断权限,或者转换路由参数或者预处理客户端请求的数据
----视图函数----
视图函数被运行了
----after_request----
在处理请求以后,执行这个钩子方法
一般可以用于记录会员/管理员的操作历史,浏览历史,清理收尾的工作
----teardown_request----
在每一次请求以后,执行这个钩子方法,如果有异常错误,则会传递错误异常对象到当前方法的参数中
None

上一篇 下一篇

猜你喜欢

热点阅读