Flask  请求钩子的实现

在 Web 应用中,有时需要在响应请求前或者响应请求后做一些处理,为了让每个视图函数避免编写重复功能的代码,Flask 提供了请求钩子,它们可以用来注册在请求处理的不同阶段执行的处理函数,我们就可以轻易的对请求进行预处理和后处理。

Flask 常用请求钩子如下:

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

这些请求钩子是使用装饰器方式实现,用法也非常简单,使用起来和app.route()装饰器基本相同。下面使用这些请求钩子装饰一些函数,用于在每次请求前后做一些处理,为了方便理解,只是单纯打印一句话。

@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')

    return response

@app.teardown_request

def teardown_request(e):

    print('teardown_request')

@app.route('/test')

def test():

    return 'test'

第一次请求控制台输出:

第二次请求控制台输出:

下面是请求钩子的一些常见应用场景:

  • before_first_request:第一个请求之前运行,可以进行一些 Web 程序的初始化操作
  • before_request:每次请求之前运行,可以进行数据库连接的创建操作、用户的权限校验操作等
  • after_request:我们经常在视图函数中进行数据库操作,比如更新、插入,之后需要将更改提交到数据库中,提交更改的代码就可以放到 after_request 钩子注册的函数中
  • teardown_request:可以接收视图函数的异常,一般用来记录错误日志

注意: 每个请求钩子可以注册任意多个处理函数,函数名也并不是必须和钩子名称相同。如果有多个 before_request,执行顺序从上往下;after_request 接收一个响应对象,并且返回同一个或者更新后的响应对象,多个 after_request 执行顺序是从下往上。

到此这篇关于Flask  请求钩子的实现的文章就介绍到这了,更多相关Flask  请求钩子内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Flask框架请求钩子与request请求对象用法实例分析

    本文实例讲述了Flask框架请求钩子与request请求对象.分享给大家供大家参考,具体如下: 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接 在请求开始时,根据需求进行权限校验 在请求结束时,指定数据的交互格式 为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子. 请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: 请求钩子 描述 before_first_request 在处理第一个

  • Flask之请求钩子的实现

    请求钩子 通过装饰器为一个模块添加请求钩子, 对当前模块的请求进行额外的处理. 比如权限验证. 说白了,就是在执行视图函数前后你可以进行一些处理,Flask使用装饰器为我们提供了注册通用函数的功能. 1.before_first_request:在处理第一个请求前执行 before_first_request 在对应用程序实例的第一个请求之前注册要运行的函数, 只会执行一次 #: A lists of functions that should be called at the beginnin

  • Flask框架中request、请求钩子、上下文用法分析

    本文实例讲述了Flask框架中request.请求钩子.上下文用法.分享给大家供大家参考,具体如下: request 就是flask中代表当前请求的request对象: 常用的属性如下: 属性 说明 类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict args 记录请求中的查询参数 MultiDict cookies 记录请求中的cookie信息 Dict headers 记录请求中的报文头 EnvironHeaders method 记录请求

  • Flask  请求钩子的实现

    在 Web 应用中,有时需要在响应请求前或者响应请求后做一些处理,为了让每个视图函数避免编写重复功能的代码,Flask 提供了请求钩子,它们可以用来注册在请求处理的不同阶段执行的处理函数,我们就可以轻易的对请求进行预处理和后处理. Flask 常用请求钩子如下: before_first_request:在处理第一个请求之前运行 before_request:在每次请求之前运行,如果没有未处理的异常抛出,会在每个请求结束后运行 after_request:如果没有未处理的异常抛出,在每次请求结束

  • Flask框架钩子函数功能与用法分析

    本文实例讲述了Flask框架钩子函数功能与用法.分享给大家供大家参考,具体如下: 在Flask中钩子函数是使用特定的装饰器的函数.为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码,那么这种函数就叫做钩子函数. before_first_request:Flask项目第一次部署后会执行的钩子函数. before_request:请求已经到达了Flask,但是还没有进入到具体的视图函数之前调用.一般这个就是在函数之前,我们可以把一些后面需要用到的数据先处理好,方

  • Python Flask请求扩展与中间件相关知识总结

    一.请求扩展 1.before_request 作用: 类比django中间件中的process_request,在请求到来执行路由函数之前先执行. 但是如果有多个顺序是从上往下执行. 应用: 基于它做用户登录认证 注意: 如果before_request的返回值不是None的清空下, 返回的而是别的值, 那么后续的请求都不会执行,本次请求直接返回, 如果定义了after_request那么会接着它执行, 最终本次请求响应结束. @app.before_request def process_r

  • Python Flask 请求数据获取响应详解

    目录 一,请求数据及其获取 1.1请求相关数据 1.2固定参数与转换器 1.3查询参数获取 1.4表单数据获取 1.5文件上传 1.6其他请求参数 二,响应数据之新书三件套 2.1字符串响应形式 2.2模板响应格式 2.3重定向响应形式 三,响应json数据与元组数据 3.1json数据响应 3.2元组数据响应 四,make_response()自定义响应 总结 一,请求数据及其获取 1.1请求相关数据 #请求参数 客户端的请求参数一般存在于三个地方 1,请求体 2,请求头 3,URL参数 1)

  • 关于Flask 上下文详细介绍

    目录 1.上下文概念 2.Flask中的上下文 2.1请求上下文 2.2应用上下文 1.上下文概念 上下文,说白了就是所谓的语境,就是语言环境.比如单独拎出来一篇文章的某一句话,我们可能不能理解它的意思,但是通过这句话所处的语言环境,再结合它前后的语句,就能很轻易的理解. 我们可以把上下文理解为当前环境的快照,是一个用来保存状态的对象.在代码执行的某个时刻,根据上下文的代码逻辑,可以决定在当前时刻下使用到的环境变量等. 2.Flask中的上下文 Flask 中有两种上下文,应用上下文(appli

  • Flask实现跨域请求的处理方法

    在Flask开发RESTful后端时,前端请求会遇到跨域的问题.下面是解决方法: 使用 flask-cors库可以很容易的解决 pip install flask-cors 两种方法,一个是全局/批量的,一个是单一独立的: 安全起见,一般来说使用独立的方式会常用一些. 1.独立方式 通过给路由添加@cross_origin标识即可 from flask import Flask, jsonify from flask_cors import cross_origin @app.route('/u

  • flask框架中勾子函数的使用详解

    在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子. 请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: before_first_request 在处理第一个请求前执行 before_request 在每次请求前执行 如果在某修饰的函数中返回了一个响应,视图函数将不再被调用

随机推荐