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所有都执行

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号