1 . flask的中间件django
1)@app.before_request # 请求进入视图函数以前,相似于django中间件的request_processflask
2)@app.after_request # 响应返回客户端以前,相似于django中间件的response_processapp
manage.py 代码以下 : 函数
from flask import Flask app = Flask(__name__) @app.before_request def be1(): print('我是be1') @app.before_request def be2(): print('我是be2') @app.before_request def be3(): print('我是be3') @app.after_request def af1(response): print('我是af1') return response @app.after_request def af2(response): print('我是af2') return response @app.after_request def af3(response): print('我是af3') return response @app.route('/index') def index(): print('我是视图函数') return 'ok' if __name__ == '__main__': app.run(debug=True)
启动项目, 访问 http://127.0.0.1:5000/index,打印结果以下 : spa
我是be1
我是be2
我是be3
我是视图函数
我是af3
我是af2
我是af1
分析:@app.after_request自上而下依次执行,@app.after_request自下而上依次执行。与django的中间件相似,@app.after_request装饰的函数不写return或者returnNone表示放行,顺利经过,不然拦截请求,返回响应。@app.after_request装饰的函数必定要有返回值,且必须有参数接收response对象。debug
修改be1函数为以下代码:code
@app.before_request def be2(): print('我是be2') return 'error'
执行结构以下 : server
我是be1
我是af3
我是af2
我是af1
注意 中间件
它与 Django的中间件仍是有区别的,对象
正常状况下 : be1 - be2 - be3 - af3 - af2 - af1
异常状况下 : be1 - be2- af3 - af2 - af1
在Flask的特殊装饰器 before_request 和 after_request 中,无论请求进入试图函数以前会走到哪一步,在响应的时候都要从作开始作响应.
2 . 重定义错误页面返回信息
@app.errorhandler(404)# 参数是错误代码 def error404(error_info):# 注意,必定要加参数接收错误信息 print(error_info) # 404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again. return '页面不存在'# 能够返回 三剑客 + 小儿子
当访问发生404错误时,会看到该函数的返回内容.