Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler
一.使用
Flask中的特殊装饰器(中间件)方法常用的有三个
- @app.before_request # 在请求进入视图函数之前
- @app.after_request # 在请求结束视图函数之后 响应返回客户端之前
- @app.errorhandler(404) # 重定义错误信息
@before_request def func():pass@after_request def func(ret): # 函数中要加参数pass@app.errorhandler(404) # 错误代码 def error404(errormessage): # 函数中要加参数pass
二.执行顺序
1. before_request返回值为None,正常状态具体分析
from flask import Flask, request, session, redirectapp = Flask(__name__) app.secret_key = "#$%^&*("@app.before_request # 在请求 之前 def be1():print("be1")@app.before_request # 在请求 之前 def be2():print("be2")@app.before_request # 在请求 之前 def be3():print("be3")@app.route("/") def index():print("index page")return "index page"@app.after_request def af1(vf_ret):# vf_ret.response[0]=b'2000000 OK!'print("af1")return vf_ret@app.after_request def af2(vf_ret):# vf_ret.response[0]=b'2000000 OK!'print("af2")return vf_ret@app.after_request def af3(vf_ret):# vf_ret.response[0]=b'2000000 OK!'print("af3")return vf_ret@app.errorhandler(404) def error404(error_message):print(error_message)# return f"你确定你要查看{request.path}这个页面吗?它已经走丢了,你快去找吧 "return redirect("http://baidu.com")if __name__ == '__main__':app.run(debug=True)
结果
2. 如果在before_request中返回值不为空
在before_request中返回值不为空的话,那么它会将每一个after_request都走一遍
from flask import Flask, request, session, redirectapp = Flask(__name__) app.secret_key = "#$%^&*("@app.before_request # 在请求 之前 def be1():print('be1')return '111'@app.before_request # 在请求 之前 def be2():print("be2")@app.before_request # 在请求 之前 def be3():print("be3")@app.route("/") def index():print("index page")return "index page"@app.route("/login") def login():print("正在登陆......")session["username"] = "username"return "login"@app.after_request def af1(vf_ret):# vf_ret.response[0]=b'2000000 OK!'print("af1")return vf_ret@app.after_request def af2(vf_ret):# vf_ret.response[0]=b'2000000 OK!'print("af2")return vf_ret@app.after_request def af3(vf_ret):# vf_ret.response[0]=b'2000000 OK!'print("af3")return vf_ret@app.errorhandler(404) def error404(error_message):print(error_message)# return f"你确定你要查看{request.path}这个页面吗?它已经走丢了,你快去找吧 "return redirect("http://baidu.com")if __name__ == '__main__':app.run(debug=True)
结果:
转载于:https://www.cnblogs.com/robertx/p/10692259.html
Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler相关推荐
- 浅谈Django的中间件与Python的装饰器
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
- Flask实战2问答平台-登录限制(装饰器)
我们来解决上一文章说到的,为登录不能点击发布问答功能 (一)先写一个装饰器 装饰器教程参考廖雪峰教程 http://t.cn/RK0SaGl from functools import wraps # ...
- python 装饰器实现_Python装饰器系列01 - 如何正确地实现装饰器
虽然人们能利用函数闭包(function clouser)写出简单的装饰器,但其可用范围常受限制.多数实现装饰器的基本方式会破坏与内省(Introspection)的关联性. 可大多数人会说:who ...
- flask中文文档_「Flask系列」 初识Flask
引子 作者有多年的编程打杂经验,之前一直参与基于Java的各种项目以及产品规划与设计,后因自己创业维持一家小公司,有些项目与产品,想降低开发成本,故在公司内部推行基于Python Flask的后端开发 ...
- flask html 模板继承,Flask框架模板继承实现方法分析
Flask框架模板继承实现方法分析 本文实例讲述了Flask框架模板继承实现方法.分享给大家供大家参考,具体如下: 在模板中,可能会遇到以下情况: 多个模板具有完全相同的顶部和底部内容 多个模板中具有 ...
- python装饰器两层和三层区别_学习python的第十五天(函数的装饰器,两层装饰器和三层装饰器)...
06.01自我总结 一.装饰器 1.函数装饰圈的定义 函数装饰器:一种装饰函数的函数 2.个人理解两层函数装饰器 两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头 ...
- Python 装饰器详解(下)
Python 装饰器详解(下) 转自:https://blog.csdn.net/qq_27825451/article/details/84627016,博主仅对其中 demo 实现中不适合pyth ...
- Python 装饰器详解(中)
Python 装饰器详解(中) 转自:https://blog.csdn.net/qq_27825451/article/details/84581272,博主仅对其中 demo 实现中不适合pyth ...
- python装饰器两层和三层_我终于弄懂了Python的装饰器(三)
此系列文档: 三.装饰器应该在何时发挥作用? 现在有个大问题: 我可以使用装饰器做什么? 装饰器看起来很酷而且功能强大,但是展示一个实际的例子会更清晰. 使用的场景有1000种可能性.但是经典用法: ...
最新文章
- OC中的自动引用计数
- elasticSearch6源码分析(2)模块化管理
- boost::math::interpolators::cardinal_quadratic_b_spline用法的测试程序
- VTK:几何对象之OpenVROrientedCylinder
- spring和CXF集成来实现webservices
- 颜色分类—leetcode75
- Constructing Roads POJ - 2421 (最小生成树)
- 一名合格的电子工程师,不能逃避的“梗”
- 正则表达式 学习笔记4.3
- STM32 串口接收流程-串口接收中断
- c语言编程请输入密码,想程序高手求助--用C语言来编辑一个输入密码的程序
- js触发button的点击事件
- Enable mod_rewrite in apache2.2
- Safe handle has been closed异常的原因及解决思路
- mysql数据库下载和创建
- 在项目里配置数据库驱动
- android自定义日历代码,Android自定义日历Calender代码实现
- DirectoryEntry 对象
- 雨天美图大法:单图去雨的RESCAN新方式
- Windows 使用VMWare虚拟机安装黑苹果