一.使用

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, redirect

app = 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, redirect

app = Flask(__name__)
app.secret_key = "#$%^&*(" @app.before_request # 在请求 之前
def be1():
print('be1')
return '' @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)

结果:

Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler的更多相关文章

  1. Flask 中的 特殊装饰器before_request/after_request

    before_request :在请求收到之前绑定一个函数做一些事情. after_request: 每一个请求之后绑定一个函数,如果请求没有异常. teardown_request: 每一个请求之后 ...

  2. python全栈开发day111-flask路由及其参数,Flask配置,蓝图,几个装饰器、闪现、send_file、jsonify

    1.endpoint参数,解决视图函数重名问题(包括装饰后重名问题) http://www.cnblogs.com/eric-nirnava/p/endpoint.html 每个应用程序app都有一个 ...

  3. Flask中的before_request装饰器和after_request装饰器以及WTForms组件

    一.before_request装饰器和after_request装饰器 我们现在有一个Flask程序其中有3个路由和视图函数 from flask import Flask app = Flask( ...

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

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

  5. Flask框架实现给视图函数增加装饰器操作示例

    在@app.route的情况下增加装饰器的写法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  6. flask系列四之SQLAlchemy(二)表关系

    一.SQLAlchemy外键约束 1.创建外键约束表结构 目标:建立两个表“用户表(user)”和“问题表( question)”,其中问题表中的作者id是是用户表的id即外键的关系.(一个用户可以有 ...

  7. Flask 页面缓存逻辑,jinja2 过滤器,测试器

    回调接入点-页面缓存逻辑 from flask import Flask,request,render_template from werkzeug.contrib.cache import Simp ...

  8. Django基础七之CBV装饰器和中间件

    Django基础七之CBV装饰器和中间件 目录 Django基础七之CBV装饰器和中间件 1. CBV加装饰器 2. Django中间件 2.1 Django中间件介绍 2.2 自定义中间件 2.2. ...

  9. python27期day14:有参装饰器、多个装饰器装饰一个函数、递归、作业题

    1.有参装饰器:给装饰器添加一个参数.来控制装饰器的行为. @auth(参数) auth里层的函数名 = auth(参数) 被装饰的函数名 = auth里层的函数名(被装饰的函数名) 被装饰的函数名( ...

随机推荐

  1. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  2. CSS-表格特有属性和定位

    1.表格特有属性 1.边框合并 属性:border-collapse 取值: 1.separate 默认值,即分离边框模式 2.collapse 边框合并 2.边框边距 作用:设置单元格之间或单元格与 ...

  3. 前端之javascript的数据类型1和BOM对象

    一 js对象 BOM对象:browser object model浏览器模型对象 window对象:定时器 DOM对象:文档对象模型 js对象:字符串对象,数组对象,日期对象,math对象 new关键 ...

  4. PLSQL Developer对oracle中的数据进行备份恢复

    1.备份数据结构 --进入  工具-->导出用户对象  如图所示 把包括所有者的√去掉,到时候我们就可以随便建一个用户导入数据了,不一定非要scott用户   2.备份数据 工具-->导出 ...

  5. 移动构造函数(c++11)

    1.概念 1)C++中对象发生拷贝的场景可以分为两种,一种是被拷贝的对象还要继续使用,另一种是被拷贝的对象不再使用:第二种一般可以认为是对右值的拷贝 2)C++11中引入了移动构造函数,对象发生拷贝时 ...

  6. hadoop hive组件介绍及常用cli命令

    Hive架构图 Hive产生原因 1 关系型数据库以产生多年sql成熟 2 简化开发降低成本 3 java成员可编写udf函数 Hive是什么 Hive是基于hadoop的一个数据库工具,使用Hql作 ...

  7. javascript 获取用户当前 经纬度 位置

    <!DOCTYPE html> <html> <body><p>http协议支持部分浏览器</p><p>https支持所有浏览器 ...

  8. ActiveMQ实战之 Queue点对点消息

    前言:ActiveMQ消息模式点对点编码 运行:先运行消费者在开启消息生产者即可接收到消息 消息生产者 /** * @摘要 测试发送单条数据的类 */ public class ZMQOneSendT ...

  9. poj 2299 Ultra-QuickSort(归并排序,树状数组,线段树)

    Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...

  10. 【慕课网实战】Spark Streaming实时流处理项目实战笔记一之铭文升级版

    第一章:课程介绍 铭文一级: VMware Fusion Mac上搭建:为了给大家演示如何使用我们的OOTB环境 Hadoop环境:虚拟机,我是远程登录 Mac 那么就不需要使用我们的OOTB环境 V ...