美文网首页
16. Flask 请求钩子

16. Flask 请求钩子

作者: Devops海洋的渔夫 | 来源:发表于2019-12-11 20:42 被阅读0次

介绍

在Django中有中间件这个类来做一些视图执行前、执行中、执行后的一些额外业务处理,那么在Flask则是采用请求钩子的方式来处理。

请求钩子

在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:在请求开始时,建立数据库连接;在请求结束时,指定数据的交互格式。为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。

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

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

示例代码

from flask import Flask, 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():
    """在第一次请求处理之前先被执行"""
    print("handle_before_first_request 被执行")

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

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

@app.teardown_request
def handle_teardown_request(response):
    """在每次请求 (视图函数处理)之后都被执行, 无论视图函数是否出现异常,都被执行, 工作在非调试模式时 debug=False"""
    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()
  • 执行index 如下:

查看后台打印的信息,如下:

可以看到尽管出现了异常,teardown_request的钩子也会照常执行。

  • 执行hello 如下:

相关文章

  • 16. Flask 请求钩子

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

  • 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...

  • Part A

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

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

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

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

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

  • flask基础(二)

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

  • Flask异常处理使用记录

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

网友评论

      本文标题:16. Flask 请求钩子

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