flask之before_request和after_request
1 before_request
类比django中间件中的process_request,在请求收到之前绑定一个函数做一些事情
# -*- coding: utf-8 -*-
# @Time : 2021/12/13 20:30
# @Author : dzg
from flask import Flask
app = Flask(__name__)
@app.before_request
def before_request():
print('来了')
@app.route('/')
def index():
print('index')
return 'ok'
if __name__ == '__main__':
app.run()
基于可以做用户登录认证
before_request没有参数
2 after_request
类比django中间件中的process_response,每一个请求之后绑定一个函数,如果请求没有异常
# -*- coding: utf-8 -*- # @Time : 2021/12/13 20:30 # @Author : dzg from flask import Flask app = Flask(__name__) @app.after_request def after_request(response): print(response) print(type(response)) print('走了') return response @app.route('/') def index(): print('index') return 'ok' if __name__ == '__main__': app.run()
after_request有参数response,并且要返回response,不然会报错
3 执行顺序
- before_request从上到下
- after_request从下到上
# -*- coding: utf-8 -*- # @Time : 2021/12/13 20:30 # @Author : dzg from flask import Flask app = Flask(__name__) @app.before_request def before_request1(): print('before_request1') @app.before_request def before_request2(): print('before_request2') @app.after_request def after_request1(response): print('after_request1') return response @app.after_request def after_request2(response): print('after_request2') return response @app.route('/') def index(): print('index') return 'ok' if __name__ == '__main__': app.run()
4 如果before_request返回了
案例一:
before_request1返回
# -*- coding: utf-8 -*- # @Time : 2021/12/13 20:30 # @Author : dzg from flask import Flask app = Flask(__name__) @app.before_request def before_request1(): print('before_request1') return 'before_request1' @app.before_request def before_request2(): print('before_request2') @app.after_request def after_request1(response): print('after_request1') return response @app.after_request def after_request2(response): print('after_request2') return response @app.route('/') def index(): print('index') return 'ok' if __name__ == '__main__': app.run()
案例2:
before_request2返回
# -*- coding: utf-8 -*- # @Time : 2021/12/13 20:30 # @Author : dzg from flask import Flask app = Flask(__name__) @app.before_request def before_request1(): print('before_request1') @app.before_request def before_request2(): print('before_request2') return 'before_request2' @app.after_request def after_request1(response): print('after_request1') return response @app.after_request def after_request2(response): print('after_request2') return response @app.route('/') def index(): print('index') return 'ok' if __name__ == '__main__': app.run()