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, 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的更多相关文章
- Flask 中的 特殊装饰器before_request/after_request
before_request :在请求收到之前绑定一个函数做一些事情. after_request: 每一个请求之后绑定一个函数,如果请求没有异常. teardown_request: 每一个请求之后 ...
- python全栈开发day111-flask路由及其参数,Flask配置,蓝图,几个装饰器、闪现、send_file、jsonify
1.endpoint参数,解决视图函数重名问题(包括装饰后重名问题) http://www.cnblogs.com/eric-nirnava/p/endpoint.html 每个应用程序app都有一个 ...
- Flask中的before_request装饰器和after_request装饰器以及WTForms组件
一.before_request装饰器和after_request装饰器 我们现在有一个Flask程序其中有3个路由和视图函数 from flask import Flask app = Flask( ...
- 浅谈Django的中间件与Python的装饰器
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
- 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 ...
- flask系列四之SQLAlchemy(二)表关系
一.SQLAlchemy外键约束 1.创建外键约束表结构 目标:建立两个表“用户表(user)”和“问题表( question)”,其中问题表中的作者id是是用户表的id即外键的关系.(一个用户可以有 ...
- Flask 页面缓存逻辑,jinja2 过滤器,测试器
回调接入点-页面缓存逻辑 from flask import Flask,request,render_template from werkzeug.contrib.cache import Simp ...
- Django基础七之CBV装饰器和中间件
Django基础七之CBV装饰器和中间件 目录 Django基础七之CBV装饰器和中间件 1. CBV加装饰器 2. Django中间件 2.1 Django中间件介绍 2.2 自定义中间件 2.2. ...
- python27期day14:有参装饰器、多个装饰器装饰一个函数、递归、作业题
1.有参装饰器:给装饰器添加一个参数.来控制装饰器的行为. @auth(参数) auth里层的函数名 = auth(参数) 被装饰的函数名 = auth里层的函数名(被装饰的函数名) 被装饰的函数名( ...
随机推荐
- EasyUI 分页 简洁代码
做分页代码,看到网上很多人实现的方法,那是各种调用,各种获取对象.我很不解,因为Easyui已经给我们了分页的具体实现,为什么有些人要画蛇添足呢. 其实真正的分页,在你的代码中,别人可能都没有注意到, ...
- Java学习笔记:23种设计模式
设计模式(Design pattern)的定义: In software engineering, a software design pattern is a general, reusable s ...
- 【搜索】Dungeon Master
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- [html]Sublime Text添加插件
今天想在Sublime Text(简称ST)内编写HTML后直接使用浏览器看效果,想添加View in Browser插件,然后遇到奇怪的问题添加插件直接报"找不到有用的插件" 一 ...
- 2017-2018-1 20155312《信息安全技术》实验二——Windows口令破解实验报告
2017-2018-1 20155312<信息安全技术>实验二--Windows口令破解实验报告 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破 ...
- P3834 【模板】可持久化线段树 1(主席树)
#include <bits/stdc++.h> #define read read() #define up(i,l,r) for(int i = (l);i <= (r);i++ ...
- De Bruijn序列
最近文章中经常出现及De Bruijin 这个关键字,网上搜索了一下,记录下来. De Bruijn序列 (德布鲁因序列) 问题:能否构造一个长度为2的n次方的二进制环状串,使得二进制环状串中总共2的 ...
- 2018.10.31 bzoj3339&&3585mex(主席树)
传送门 双倍经验 直接上主席树,每个叶节点维护这个值出现的最右区间,非叶子节点维护当前值域内所有最右区间的最小值. 查询的时候只用在以root[qr]root[qr]root[qr]为根的树上面二分. ...
- bootstrap表格参数说明
表格参数: 名称 标签 类型 默认 描述 - data-toggle String ‘table’ 不用写 JavaScript 直接启用表格. classes data-classes String ...
- tomcat https 支持android 6.0及以上版本的配置方法
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" scheme ...