在我们写好了简单的框架后,我们可以优化一下个人中心界面,这里我们希望用户在登录之后才可以进入个人中心,如果他还没有登录,就将他转到登录界面。
那么我们就需要用到钩子函数(如果你在视图函数中用if判断也可以,但是用户用路由访问时可能会拦不住),钩子函数的作用就是(百度查找的):**钩子函数是指在执行函数和目标函数之间挂载的函数,框架开发者给调用方提供一个point-挂载点,至于挂载什么函数由调用方决定**,简单来说就是在进入服务器前进行拦截是否可以通过。
在flask中钩子函数一般有:
直接应用在app上:
**before_first_request
before_request
after_request
teardown_request**
应用在蓝图上:
before_app_first_request
before_app_request
after_app_request
teardown_app_request
现在废话少说,直接上代码:
#先定义一个需要登录才能进入的路由列表
request_login_list=['/user/center']
@user_bp1.before_app_request
def before_request():
print("before_app_request",request.path)
if request.path in request_login_list:
id = session.get('uid')
if not id:
#在控制台中测试
print("请先登录")
return render_template('user/login.html')
else:
user=User.query.get(id)
#g对象:本次请求的对象(flask框架已经帮你定义,存活周期就是这次请求,一直到teardown)
g.user=user
在这里,我们将钩子函数应用到蓝图上,那么在每次进入个人中心都需要进行登录,并且使用到了g对象,g对象和session的区别:session对象是可以跨request的,只要session还未失效,不同的request的请求会获取到同一个session,但是g对象不是,g对象不需要管过期时间,请求一次就g对象就改变了一次,或者重新赋值了一次。
ok!功能已经完成!
到这里,钩子函数作用以及使用方法教学就完成了。