Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flask 请求钩子

Flask 请求钩子

作者头像
Devops海洋的渔夫
发布于 2019-12-16 09:43:48
发布于 2019-12-16 09:43:48
88800
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:0
代码可运行

介绍

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

请求钩子

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

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

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

示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 如下:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flask 请求钩子
为了让每个视图函数避免编写重复功能的代码,Flask 提供了通用设施的功能,即请求钩子。
忆想不到的晖
2022/05/11
8580
Flask 请求钩子
Flask路由&视图
在浏览器访问127.0.0.1:5000/func1和 127.0.0.1:5000/func2,返回的结果都是func。
py3study
2020/01/16
7370
小白学Flask第八天| Flask上下文和请求钩子
在这篇文章之前,我们学习过request和session这两个小家伙,他们两的功能都非常的强大,我们今天讲上下文对象,也是和他们两有着很大的关系。
Python进击者
2019/09/17
6310
Flask 学习-67.钩子函数before_request 和 before_first_request 的使用
前言 学过pytest框架的肯定知道什么叫钩子(hook)函数, 钩子函数的作用是在程序运行的过程中插入一段代码做一些事情。 四个钩子 请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: before_first_request      在对应用程序实例的第一个请求之前注册要运行的函数, 只会执行一次 before_request  在每次请求前执行,如果在某修饰的函数中返回了一个响应,视图函数将不再被调用 after_request  如果没有抛出错误,在每次请求后执行接受一个参数:视图函
上海-悠悠
2022/09/19
2.2K0
flask中请求勾子
在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:     *在请求开始时,建立数据库连接;     *在请求开始时,根据需求进行权限校验;     *在请求结束时,指定数据的交互格式;
py3study
2020/01/19
3900
Flask 中的上下文管理和请求钩子
在使用 Flask 框架实现功能接口的时候,前端点击按钮发送请求的请求方式和 form 表单提交给后端的数据,后端都是通过 Flask 中的 request 对象来获取的。
Python碎片公众号
2021/02/26
1.8K0
Flask 中的上下文管理和请求钩子
Python + Flask 常用的钩子函数
钩子函数是指在执行函数和目标函数之间挂载的函数,框架开发者给调用方提供一个point-挂载点,至于挂载什么函数由调用方决定。
Wu_Candy
2022/07/04
8370
Flask阶段(一)代码
1.helloworld.py #1.从flask模块导入了Flask类 from flask import Flask #2.创建flask对象 #参数1: __name__,如果从当前文件启动,那么值是__main__, 如果是从其他模块调用运行的那么值是模块的名字 #参数2: static_url_path,表示静态资源的访问地址, /static #参数3: static_folder, 用来存储静态资源的,默认名字是static #参数4: template_folder, 模板文件夹,默认的值
小闫同学啊
2019/07/18
4810
flask之请求钩子
from flask import Flask from flask import abort app = Flask(__name__) # 在第一次请求之前调用,可以在此方法内部做一些初始化操作 @app.before_first_request def before_first_request(): print("before_first_request") # 在每一次请求之前调用,这时候已经有请求了,可能在这个方法里面做请求的校验 # 如果请求的校验不成功,可以直接在此方法中进行
汪凡
2019/03/01
4430
Python Flask 编程 | 连载 03 - Flask 请求
应用上下文对象有两个,分别是 current_app 表示当前应用的实例以及 g 表示处理请求时临时存储对象,每次请求都会重设这个变量,并且 g 对象时线程隔离的,使用g对象需要导入,g 既 global。
RiemannHypothesis
2022/09/26
3690
Python Flask 编程 | 连载 03 - Flask 请求
Flask入门很轻松 (二)
转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959454.html
py3study
2020/01/15
3960
Hello Flask
Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎。Flask使用BSD授权。 Flask被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。 Flask英文翻译为瓶子,烧瓶,与另一个web框架Bottle同义,意在表示另一种容器,另一个框架。而且他们两个也有一些相似的地方。
py3study
2020/01/16
1.5K0
Hello Flask
flask框架2_flask框架介绍
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179055.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
7460
flask框架2_flask框架介绍
学习笔记 | Flask学习从入门到放弃(2)
Flask Web学习笔记之Flask与HTTP 2.1 请求响应循环 每一个Web应用都包含这种处理模式:客户端发出请求,服务器端处理请求并返回响应 HTTP是客户端和服务器端沟通的桥梁,当用户点击URL时,浏览器会生成http请求,经互联网发送到对应的web服务器,Web服务器端接收请求,通过WSGI将HTTP格式数据转换成能用的数据,并生成响应又依次返回给客户端 2.2 HTTP请求 2.2.1 报文 常见HTTP方法:GET,POST,PUT,DELETE,HEAD,OPTIONS 2.2.2 Re
Justlovesmile
2021/12/14
8380
Flask 程序的基本结构
1、初始化   所有Flask程序都必须创建一个程序实例。web服务器使用一种名为Web服务器网关借口的协议,把接收自客户端的所有请求都转交给这个对象处理。 from flask import Flask app = Flask(__name__)   Flask类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。 2、路由和视图函数 客户端把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例。程序实例需要知道对每个URL请求运行哪些代码,所以保存了一个URL到Python函数的映
用户1173509
2018/01/17
1K0
Flask 程序的基本结构
Flask 入门系列教程(二)
本节,我们先从一道经典的面试题目开始:当你在浏览器中输入一个 URL 并按下 Enter 后,都发生了什么?
周萝卜
2020/09/18
1.2K0
Flask视图_
版权声明:Copyright © https://blog.csdn.net/zzw19951261/article/details/80461047
zhengzongwei
2019/07/30
5380
Flask的请求扩展
from flask import Flask,request app = Flask(__name__) 一.请求前 before_request 用法 @app.before_request def func(): print(request) #可以在请求来前对于request进行处理 #return 如果有返回值页面将渲染返回值不走@app.routex相关函数 #如有有返回值且有after_request相关函数他的返回值会接着执行after_request相关函数
小小咸鱼YwY
2020/06/19
4910
【Flask】FlaskWeb开发上手点滴(01)-入门
首先从flask初始化的一个例子说起。 打开pyCharm新建一个Flask的项目之后,会初始化一个Flask的程序目录(假设创建一个名为flaskblog的项目)。首先来看flaskblog.py这个文件里的代码: (包含注释)
前端修罗场
2023/10/07
2610
python中flask 常见问题
本文出自https://blog.csdn.net/qq_33020901/article/details/69802445
py3study
2020/01/13
1.7K0
相关推荐
Flask 请求钩子
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验