python - 狗书中的用户资料一章,User模型的注册时间member_since属性每次本地调试时发生变化是什么原因?
PHP中文网
PHP中文网 2017-04-18 09:44:05
0
1
371

先贴上相关代码,就是狗书的源码
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值倒是没问题。请问是哪里出问题了?

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(1)
洪涛

Le code suivant doit être écrit dans le modèle de rendu
Je ne sais pas à quoi ressemble le code de l'affiche originale, il est préférable de le poster et d'y jeter un œil

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

PS : Après discussion et échange avec l'affiche originale, j'ai trouvé qu'il devait être dans les modèles. L'attribut member_since a été ajouté à la base de données après la création de l'utilisateur, il n'y avait donc aucune donnée dedans, et lors du rendu précédent. , member_since a été ajouté au modèle. = La fonction datetime.utcnow de db.Column(db.DateTime(), default=datetime.utcnow) a été déclenchée et la date a été actualisée, mais elle n'a pas été saisie dans la base de données par db. session.add, ce qui entraîne le déclenchement de datetime à chaque fois que vous vous connectez. Fonction .utcnow, c'est donc la dernière date à chaque fois.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!