确定 django 中会话的年龄

jMy*_*les 7 django session django-views

如何确定 django 中会话对象的年龄?

jMy*_*les 3

好的,这就是我的想法。好多了。我认为这与在 Session 对象上使用 post_save 一样便宜:

from django.db import models
from people.models import Member
from django.contrib.sessions.models import Session
from django.contrib.sessions.backends.db import SessionStore


from django.db.models import *
from django.db.models.signals import post_save, pre_delete, post_init
from datetime import datetime

class SessionInfo(models.Model):
    #note: a OneToOneField with the name 'session' has been added as part of the inheritance
    created = models.DateTimeField(auto_now_add=True) #joined field is auto initialized with creation time
    session = models.OneToOneField(Session)
    def age(self):
        return (datetime.now() - self.created)


def session_create_listener(instance, **kwargs):
    store = SessionStore(session_key=instance.session_key)

    if '_auth_user_id' in store:
        try:
            instance.sessioninfo
        except SessionInfo.DoesNotExist:
            sessioninfo = SessionInfo(session=instance) 
            sessioninfo.save()        

post_save.connect(session_create_listener, sender=Session)
Run Code Online (Sandbox Code Playgroud)