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()