返回介绍

记录用户的最后访问时间

发布于 2025-01-02 21:53:50 字数 1228 浏览 0 评论 0 收藏 0

让我们从更容易实现的 last_seen 字段开始。 我想要做的就是一旦某个用户向服务器发送请求,就将当前时间写入到这个字段。

为每个视图函数添加更新这个字段的逻辑,这么做非常的枯燥乏味。在视图函数处理请求之前执行一段简单的代码逻辑在 Web 应用中十分常见,因此 Flask 提供了一个内置功能来实现它。解决方案如下:

from datetime import datetime

@app.before_request
def before_request():
    if current_user.is_authenticated:
        current_user.last_seen = datetime.utcnow()
        db.session.commit()

Flask 中的 @before_request 装饰器注册在视图函数之前执行的函数。这是非常有用的,因为现在我可以在一处地方编写代码,并让它在任何视图函数之前被执行。该代码简单地实现了检查 current_user 是否已经登录,并在已登录的情况下将 last_seen 字段设置为当前时间。我之前提到过,应用应该以一致的时间单位工作,标准做法是使用 UTC 时区,使用系统的本地时间不是一个好主意,因为如果那么的话,数据库中存储的时间取决于你的时区。最后一步是提交数据库会话,以便将上面所做的更改写入数据库。如果你想知道为什么在提交之前没有 db.session.add() ,考虑在引用 current_user 时,Flask-Login 将调用用户加载函数,该函数将运行一个数据库查询并将目标用户添加到数据库会话中。所以你可以在这个函数中再次添加用户,但是这不是必须的,因为它已经在那里了。

如果在进行此更改后查看你的个人主页,则会看到“Last seen on”行,并且时间非常接近当前时间。 如果你离开个人主页,然后返回,你会看到时间在不断更新。

事实上,我在存储时间和在个人主页显示时间的时候,使用的都是 UTC 时区。 除此之外,显示的时间格式也可能不是你所预期的,因为实际上它是 Python datetime 对象的内部表示。 现在,我不会操心这两个问题,因为我将在后面的章节中讨论在 Web 应用中处理日期和时间的主题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文