Django会话后保存调用了twi

2024-04-25 21:15:55 发布

您现在位置:Python中文网/ 问答频道 /正文

Django会议新手, 我要防止从同一个凭据多次登录。在

class UserManager(models.Model):
    """
    It hold session_key used for log-in for particular user.
    """

    user = models.OneToOneField(User, db_index=True)
    session = models.OneToOneField(
        Session, null=True, on_delete=models.SET_NULL
    )


def session_post_save(**kwargs):
    session = kwargs['instance']

    uid = session.get_decoded().get('_auth_user_id')

    if uid:
        profile = UserManager.objects.get(user__id=uid)

        # delete old session
        if profile.session:
            profile.session.delete()

        # update session value
        profile.session = session
        profile.save()


post_save.connect(session_post_save, sender=Session,
                  dispatch_uid='session_post_save_add_usermanager')

问题是,我不明白为什么session_post_save方法被调用了两次?还是会议工作?在

当用户login()方法异常并且session.get_decoded().get('_auth_user_id')为None时,第一次调用它,然后在某个函数django/contrib/sessions/backends/base.py(279)cycle_key()中会话get被删除。不知道为什么?在

又插回去了。 第二次调用session\u post_save方法时返回响应,session.get_decoded().get('_auth_user_id')不是None。在

谢谢


Tags: 方法authiduidgetmodelssessionsave