Session 缓存烧瓶登录用户\u加载器

Session 缓存烧瓶登录用户\u加载器,session,caching,flask,flask-sqlalchemy,flask-login,Session,Caching,Flask,Flask Sqlalchemy,Flask Login,我们使用flask login,从代码中可以看出,user\u loader回调在每个请求上都被调用。我知道这是为了加载当前用户,但是我可以避免每次请求都点击users表吗 下面是我的用户加载程序的外观 @login_manager.user_loader def load_user(id=None): return User.query.get(id) 应该缓存的是User.query.get,而不是load\u User 这是一个示例代码: def get_用户(id): 如果没有

我们使用
flask login
,从代码中可以看出,
user\u loader
回调在每个请求上都被调用。我知道这是为了加载当前用户,但是我可以避免每次请求都点击users表吗

下面是我的用户加载程序的外观

@login_manager.user_loader
 def load_user(id=None):
  return User.query.get(id)

应该缓存的是
User.query.get
,而不是
load\u User

这是一个示例代码:


def get_用户(id):
如果没有身份证:
一无所获
缓存\u键='用户\u%d'%id'
rt=cache.get(cache\u键)
如果rt不是None:#缓存命中
返回rt
否则:#缓存未命中
u=User.query.get(id)
cache.set(cache\u键,u)
返回u

一些注意事项:

  • 这里,
    cache
    对象表示一个redis客户机或memcached客户机,让您自己实现
  • 另外,用户实例可能不会直接存储在缓存后端,因此 应进行序列化和反序列化
  • 如有必要,还应检查缓存结果的过期时间
  • 接下来,但并非最不重要的一点是,当用户发生更改(例如,属性已编辑或状态已更新)时,应调用缓存
  • 缓存模式(如果缓存命中则返回,如果缓存未命中则获取和缓存)可以实现为缓存装饰器,因此可以重用为其他类型的缓存

  • 读了你答案的第一行之后,我觉得自己很傻,以至于在问之前我没有想到这一点!谢谢@menghan