一.使用

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相关推荐

  1. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  2. Flask实战2问答平台-登录限制(装饰器)

    我们来解决上一文章说到的,为登录不能点击发布问答功能 (一)先写一个装饰器 装饰器教程参考廖雪峰教程 http://t.cn/RK0SaGl from functools import wraps # ...

  3. python 装饰器实现_Python装饰器系列01 - 如何正确地实现装饰器

    虽然人们能利用函数闭包(function clouser)写出简单的装饰器,但其可用范围常受限制.多数实现装饰器的基本方式会破坏与内省(Introspection)的关联性. 可大多数人会说:who ...

  4. flask中文文档_「Flask系列」 初识Flask

    引子 作者有多年的编程打杂经验,之前一直参与基于Java的各种项目以及产品规划与设计,后因自己创业维持一家小公司,有些项目与产品,想降低开发成本,故在公司内部推行基于Python Flask的后端开发 ...

  5. flask html 模板继承,Flask框架模板继承实现方法分析

    Flask框架模板继承实现方法分析 本文实例讲述了Flask框架模板继承实现方法.分享给大家供大家参考,具体如下: 在模板中,可能会遇到以下情况: 多个模板具有完全相同的顶部和底部内容 多个模板中具有 ...

  6. python装饰器两层和三层区别_学习python的第十五天(函数的装饰器,两层装饰器和三层装饰器)...

    06.01自我总结 一.装饰器 1.函数装饰圈的定义 函数装饰器:一种装饰函数的函数 2.个人理解两层函数装饰器 两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头 ...

  7. Python 装饰器详解(下)

    Python 装饰器详解(下) 转自:https://blog.csdn.net/qq_27825451/article/details/84627016,博主仅对其中 demo 实现中不适合pyth ...

  8. Python 装饰器详解(中)

    Python 装饰器详解(中) 转自:https://blog.csdn.net/qq_27825451/article/details/84581272,博主仅对其中 demo 实现中不适合pyth ...

  9. python装饰器两层和三层_我终于弄懂了Python的装饰器(三)

    此系列文档: 三.装饰器应该在何时发挥作用? 现在有个大问题: 我可以使用装饰器做什么? 装饰器看起来很酷而且功能强大,但是展示一个实际的例子会更清晰. 使用的场景有1000种可能性.但是经典用法: ...

最新文章

  1. OC中的自动引用计数
  2. elasticSearch6源码分析(2)模块化管理
  3. boost::math::interpolators::cardinal_quadratic_b_spline用法的测试程序
  4. VTK:几何对象之OpenVROrientedCylinder
  5. spring和CXF集成来实现webservices
  6. 颜色分类—leetcode75
  7. Constructing Roads POJ - 2421 (最小生成树)
  8. 一名合格的电子工程师,不能逃避的“梗”
  9. 正则表达式 学习笔记4.3
  10. STM32 串口接收流程-串口接收中断
  11. c语言编程请输入密码,想程序高手求助--用C语言来编辑一个输入密码的程序
  12. js触发button的点击事件
  13. Enable mod_rewrite in apache2.2
  14. Safe handle has been closed异常的原因及解决思路
  15. mysql数据库下载和创建
  16. 在项目里配置数据库驱动
  17. android自定义日历代码,Android自定义日历Calender代码实现
  18. DirectoryEntry 对象
  19. 雨天美图大法:单图去雨的RESCAN新方式
  20. Windows 使用VMWare虚拟机安装黑苹果

热门文章

  1. NS2安装笔记 - Ubuntu9.10
  2. Eclipse中显示文件字符乱码
  3. Linux xargs命令
  4. 使用机器学习预测天气_使用机器学习的二手车价格预测
  5. 使用composer_在Google Cloud Composer(Airflow)上使用Selenium搜寻网页
  6. C语言高级编程:数组指针与数组
  7. 16岁的蒙古摔跤手(狼行天下:追寻狼迹内蒙生态行第三天)
  8. 32个最热CPLD-FPGA论坛
  9. 查询计算机端口号被谁占用了
  10. 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署