flask的请求扩展

Do better / 2023-08-18 / 原文

1 概念

flask请求扩展类似于django中的中间件

2  before_request

@app.before_request
def before():
    # 当次请求对象是request
    # 1 判断访问的不同路径
    if request.path=='/':
        print('来了')
    else:
        print('访问其他路径')

    # 2 判断:如果是根路径,向request对象中放个name,如果不是,则不放
    if request.path=='/':
        request.name='拿取'
    else:
        print('访问其他路径')

    # 3 返回none,会执行下一个请求扩展,如果返回四件套,就直接返回,不再往下执行
    if request.path=='/':
        return  '访问不存在'
    else:
        print('访问其他路径')
  
#4 多个before_request,由上而下执行
@app.before_request
def before1():
    print('111')

@app.before_request
def before2():
    print('222')
    
@app.route('/')
def jinx():
    # print(request.name)
    return 'aaa'

@app.route('/index')
def index():
    # print(request.name) # 没有放入,走此路由会报错
    return 'bbb'

3 after_request

# after_request
@app.after_request
def after(response):
    print(response) # 正常响应对象
    print('leave')
    # 1 用处:处理跨域
    response.headers['xxx']='aaaa'

    # 2 多个before_request和 after_request执行顺序:
    # 请求来了,从上往下执行before_request,请求走了,从下往上执行after_request
    return response # 一定要返回response

@app.route('/')
def jinx():
    # print(request.name)
    return 'aaa'

@app.route('/index')
def index():
    # print(request.name) # 没有放入,走此路由会报错
    return 'bbb'