**学习flask-login中,许多教程都说需要定义这个函数,但是都没有说清楚这个函数什么时候被调用
所以请问
1.load_user函数什么时候被调用了
2.为什么需要填写load_user函数,具体到底是做什么的
3.请不要回答看官方文档,能看懂就不会问了,谢谢!!**
app/models.py 加载用户的回调函数
from . import login_manager
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
要了解load_user的作用,先来看一下flask-login 是怎么工作的:
当我们访问/admin时,flask-login会检查是否登录没有登录时会跳转到登录页,其实现在装饰器内部,源码也很简单,可以去看看。当跳转到登录页时,提交完表单之后要调用login_user函数:
在login_user函数内部:
可以看到,我们手动调用是将user的属性写入session,并绑定到当前的请求上下文。由于HTTP是无状态连接,每次发起新请求时flask 会创建一个请求上下文,在分发路由时flask-login根据cookie判断用户并绑定到当前的请求上下文,由于这种绑定关系的存在,那么每次新的请求发生时都需要获取user 看一下最后绑定的代码:
self.user_callback就是实现的load_user方法,那么其作用就是每次新请求时调用该方法获取user并绑定到当前的请求上下文,绑定的意义在于每次当我们使用current_user的时候,会直接从当前上下文中返回。
![图片描述 图片描述](/img/bVRifF?w=543&h=267)
最后附上一张一次请求flask调用栈: