flask之请求扩展

请求扩展

1 before_request

可以多个请求之前的函数
执行顺序是谁在前面谁先执行
如果前面的before_request有返回值,后面的都不会执行
#基于它做用户登录认证
@app.before_request
def process_request(*args,**kwargs):
    if request.path == '/login':
        return None
    user = session.get('user_info')
    if user:
        return None
    return redirect('/login')

@app.before_request
def sb():
    print(request)
    print("我是请求之前")
    return "我是请求之前1的返回"

# 上面有返回值,后面的都不会执行
@app.before_request
def  sb1():
    print("我是请求之前2")
    #return "我是请求之前2的返回"

2 after_request

可以在请求之后添加多个after_request
执行顺序是谁在前面谁后执行
before_request对我的after_request没有影响,有没有返回值都会执行
@app.after_request
def process_response1(response):
    print('process_response1 走了')
    return response

@app.after_request
def process_response2(response):
    print('process_response2 走了')
    return response

3 before_first_request

'''
项目启动后的第一次访问
'''
@app.before_first_request
def first():
    print("我的第一次")

4 teardown_request

'''
无论有没有异常都会执行,有异常会把异常传递进来
'''
@app.teardown_request 
def ter(e):
    print(e)
    print("我是异常")

5 errorhandler

'''
@app.errorhandler(要捕获的错误码)
'''
@app.errorhandler(404)
def error_404(arg):
    return "404错误了"

6 template_global

标签

@app.template_global()
def sb(a1, a2):
    return a1 + a2
'''
在模板中直接使用该函数就可以了,不需要返回模板并传参
'''
#{{sb(1,2)}}

7 template_filter

过滤器

@app.template_filter()
def db(a1, a2, a3):
    return a1 + a2 + a3
'''
在模板中直接使用该过滤器就可以,根据函数的形参来传递
'''
#{{ 1|db(2,3)}}

总结:

1 重点掌握before_request和after_request,

2 注意有多个的情况,执行顺序

3 before_request请求拦截后(也就是有return值),response所有都执行

猜你喜欢

转载自www.cnblogs.com/XuChengNotes/p/12149308.html