GuaGe
(不撞南墙)
1
我的需求:
当用户登录的成功后,自动增加登录的次数
数据模型:
login_times = db.Column(db.Integer, default=0)
# 记录用户的登录次数
def add_login_times(self):
self.login_times += 1
db.session.add(self)
db.session.commit()
我的实现方法:
@app.before_first_request
def auto_add_login_times():
if current_user.is_authenticated:
current_user.add_login_times()
好像这样不行,我应该怎么写呢?
GuaGe
(不撞南墙)
3
就是无法自动增加登录的次数啊!
后面我干脆在登录视图函数里面加算了,虽然这样很丑陋!
我认为增加登录次数功能正常情况下就是在登录视图函数里写的。
因为@app.before_first_request
这个钩子函数是针对app实例第一次请求过来而触发的钩子函数,因为只触发一次所以可以放一些数据库初始化的代码。不过项目中我很少用到。
1 个赞
如果是放在@app.before_request
里,则是统计已登录用户请求次数。
GuaGe
(不撞南墙)
6
我查了下,有一种使用 flask-login logged_user 的方法,但是看不太懂
好像可以自定义很多关于用户的统计信息
GuaGe
(不撞南墙)
8
不过刷新最后用户的登录时间,我还是用的 before_request !但是这样的化会不会每发一次请求就会刷新登录时间?
如果换成这样会不会好点:
记录用户的最后在线时间在 logout_user() 视图里面写,下线的时间=最后在线时间 ?
用户最后在线时间最好还是理解为用户最后一次请求时间,毕竟大多数人都习惯不点击登出,而且用户端是很容易出现非正常关闭(非正常登出)的。
登出一般用来删掉客户端的Cookie(尤其是Remember Me Cookie)。
GuaGe
(不撞南墙)
10
最后一次请求怎么知道啊?
好像没有这种功能的 钩子啊
after_reqeuest ?
after_this_request?
teardown_request?
GuaGe
(不撞南墙)
11
好像明白了,我仔细看了书上讲各种钩子的那一部分!
before_reqeust 的例子就是记录用户最后在线时间
好像我就是这么写的,看来没有问题!
def last_login_time(self):
self.last_login_time = datetime.utcnow()
@app.before_request
def user_last_seen():
if current_user.is_authenticated:
current_user.last_login_time()
1 个赞
那些钩子函数都是请求生命周期的钩子函数。并不能直接用在你说的用户登录的业务逻辑上,所以这里思维需要转换一下。
用户端收到响应后,请求生命周期(钩子函数)已经完整走一遍了。并不是说Flask会提供一个还没有触发的「用户登出钩子函数」。
GuaGe
(不撞南墙)
13
非常感谢啊,这部分听了你的解释和自己实际操作了之后,现在是算明白过来了!
1 个赞