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