美文网首页
Flask请求钩子

Flask请求钩子

作者: 测试探索 | 来源:发表于2020-09-21 06:16 被阅读0次

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

  • before_first_request:在处理第一个请求前运行
    @app.before_first_request
  • before_request:在每次请求前运行
  • after_request(response):如果没有未处理的异常抛出,在每次请求后运行
  • teardown_request(response):在每次请求后运行,即使有未处理的异常

无异常情况下,请求钩子的实现顺序

from flask import Flask,session,current_app,g

app = Flask(__name__)


# flask默认把session保存到了cookie中
@app.route("/index")
def set_cookie():
    print("index 被执行")
    return "index page"

@app.before_first_request
def handle_before_first_request():
    """
    在第一次请求处理之前先被执行
    :return:
    """
    print("handle_before_first_request 被执行")

@app.before_request
def handle_before_request():
    """
    在每次请求前都被执行
    :return:
    """
    print("handle_before_request 被执行")


@app.after_request
def handle_after_request(response):
    """
    在每次请求(视图函数处理之后)都被执行,前提是视图函数没有出现异常
    :return:
    """
    print("handle_after_request 被执行")
    return response

@app.teardown_request
def handle_teardown_request(response):
    """
    在每次请求(视图函数处理之后)都被执行,无论视图函数是否出现异常,都被执行
    工作在非调试模式时,debug=False
    :return:
    """
    print("handle_teardown_request 被执行")
    return response


if __name__ == '__main__':
    app.run()
第一次执行结果
image.png
第一次执行结果
第二次执行结果
第二次执行结果

异常情况下,请求钩子的实现顺序,在视图函数里加入了a=1/0

from flask import Flask,session,current_app,g

app = Flask(__name__)


# flask默认把session保存到了cookie中
@app.route("/index")
def set_cookie():
    print("index 被执行")
    a = 1/0
    return "index page"

@app.before_first_request
def handle_before_first_request():
    """
    在第一次请求处理之前先被执行
    :return:
    """
    print("handle_before_first_request 被执行")

@app.before_request
def handle_before_request():
    """
    在每次请求前都被执行
    :return:
    """
    print("handle_before_request 被执行")


@app.after_request
def handle_after_request(response):
    """
    在每次请求(视图函数处理之后)都被执行,前提是视图函数没有出现异常
    :return:
    """
    print("handle_after_request 被执行")
    return response

@app.teardown_request
def handle_teardown_request(response):
    """
    在每次请求(视图函数处理之后)都被执行,无论视图函数是否出现异常,都被执行
    工作在非调试模式时,debug=False
    :return:
    """
    print("handle_teardown_request 被执行")
    return response



if __name__ == '__main__':
    app.run()
执行结果
补充说明
from flask import Flask,session,current_app,request,url_for

app = Flask(__name__)

@app.route("/index")
def index():
    print("index 被执行")
    a = 1/0
    return "index page"

@app.route("/hello")
def hello():
    print("hello 被执行")
    return "hello page"

@app.before_first_request
def handle_before_first_request():
    """
    在第一次请求处理之前先被执行
    :return:
    """
    print("handle_before_first_request 被执行")

@app.before_request
def handle_before_request():
    """
    在每次请求前都被执行
    :return:
    """
    print("handle_before_request 被执行")


@app.after_request
def handle_after_request(response):
    """
    在每次请求(视图函数处理之后)都被执行,前提是视图函数没有出现异常
    :return:
    """
    print("handle_after_request 被执行")
    return response

@app.teardown_request
def handle_teardown_request(response):
    """
    在每次请求(视图函数处理之后)都被执行,无论视图函数是否出现异常,都被执行
    工作在非调试模式时,debug=False
    :return:
    """
    path = request.path
    if path == url_for("index"):
        print("在请求钩子中,判断请求的视图函数:index")
    elif path == url_for("hello"):
        print("在请求钩子中,判断请求的视图函数:hello")
    print("handle_teardown_request 被执行")
    return response



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

运行代码,填写路由,即可查看结果

相关文章

  • Flask请求钩子

    请求钩子是通过装饰器的形式实现,Flask支持如下四中请求钩子: before_first_request:在处理...

  • Flask——请求钩子

    在客户端和服务器交互过程中,有些准备工作或者扫尾工作需要处理。比如:1.在请求开始时,建立数据库连接;2.在请求开...

  • day60-钩子函数及邮件发送

    1钩子函数 flask中钩子函数相当于django中在请求前及请求后做什么的中间件。钩子函数有before:请求之...

  • 2020-06-01--flask03--flask基础03

    本节内容 请求钩子 request 状态保持(cookie,session) 上下文 flask_script j...

  • 16. Flask 请求钩子

    介绍 在Django中有中间件这个类来做一些视图执行前、执行中、执行后的一些额外业务处理,那么在Flask则是采用...

  • Part A

    请求钩子响应返回状态码: 利用Response对象进行返回 重定向 使用FLask-Script 使用Bootst...

  • 【OK】flask笔记(十六):请求钩子

    一、什么是请求钩子? 1.请求钩子的含义 有时在处理请求之前或之后执行代码会很有用,在Django中学的中间件类似...

  • Flask初探六 ( 请求钩子 / 钩子函数 / 蓝图 )

    请求钩子 通过装饰器为一个模块添加请求钩子, 对当前模块的请求进行额外的处理. 比如权限验证. 项目结构 应用钩子...

  • flask基础(二)

    flask中的中间键(钩子函数) before_first_request第一次请求才被调用(可用于缓存) bef...

  • Flask异常处理使用记录

    Flask异常处理使用记录 初识Flask异常处理,是使用@app.teardown_request钩子函数错处理...

网友评论

      本文标题:Flask请求钩子

      本文链接:https://www.haomeiwen.com/subject/yqlmyktx.html