python - 狗书中的用户资料一章,User模型的注册时间member_since属性每次本地调试时发生变化是什么原因?

 手机用户2502863445 发布于 2022-10-27 12:07

先贴上相关代码,就是狗书的源码
app/models.py

class User(UserMixin, db.Model):
    member_since = db.Column(db.DateTime(), default=datetime.utcnow)
    last_seen = db.Column(db.DateTime(), default=datetime.utcnow)
    
    def ping(self):
        self.last_seen = datetime.utcnow()
        db.session.add(self)

app/auth/views.py

@auth.before_app_request
def before_request():
    if current_user.is_authenticated:
        current_user.ping()

代码是在本地测试的,我是9月份的时候添加的3个用户,但发现每次run,用户资料页的member_since值都会刷新成当天的日期,last_seen值倒是没问题。请问是哪里出问题了?

1 个回答
  • 渲染模板里面应该是写成如下代码
    不知道楼主的代码里面是怎么样的,最好贴出来看下

    <p>Member since {{ moment(user.member_since).format('L') }}.Last seen {{ moment(user.last_seen).fromNow() }}.</p>
    

    PS:经过和楼主的讨论交流,发现应该是models里面,member_since这个属性加入数据库的时间,是在创建用户之后,所以导致里面一直没有数据,而前段渲染的时候又导致了模型内member_since = db.Column(db.DateTime(), default=datetime.utcnow)的datetime.utcnow函数被触发,刷新了日期,但是又没有被db.session.add进数据库,导致最后每次登陆都会触发一次datetime.utcnow函数,所以每次都是最新日期。

    2022-10-27 22:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有