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


 

 

 

 

 

posted @ 2022-03-24 21:25  甜甜de微笑  阅读(516)  评论(0编辑  收藏  举报