Django-检查用户之前是否已经登录

时间:2020-03-11 19:18:15

标签: django

用户注册后,他们将被重定向到主页。如果这是他们的第一次登录,我想显示一个div,但是如果不是他们的第一次,我不想显示此div。目前,我依靠date_joinedlast_login进行此检查。

但是,这仅检查日期,而不检查时间。因此,div仍会出现直到日期更改。我只希望div显示一次。这是用户第一次登录。

到目前为止,这是我的代码: views.py:

def home(request):
    context={}
    user = request.user
    if user.last_login.date() == user.date_joined.date():
        context['isFirstTime'] = 'isFirstTime'
    else:
        pass
    return render(request, 'home.html', context)

模板:

   {% if isFirstTime %}
        <div style="width: 300px; height: 300px; background-color: green;">

        </div>
    {% endif %}

有人知道我可以如何更改它,以便它可以使用当前时间而不是当前日期。这样,仅在用户首次登录时才显示div。有人知道解决方案吗?谢谢。 date_joinedlast_login也是存储在数据库中的日期时间对象。

2 个答案:

答案 0 :(得分:2)

考虑使用属性last_login创建一个date_joined模型,而不是使用UserProfileis_first_login,您可以详细了解UserProfile {{3} }。

在您的模型中。py:

class UserProfile(models.Model):  
    user = models.OneToOneField(User, related_name='profile')
    is_first_login = models.BooleanField(default=True)  

您认为:

def home(request):
    context={}
    user = request.user
    if user.profile.is_first_login:
        context['isFirstTime'] = 'isFirstTime'
        user.profile.is_first_login = False
        user.profile.is_first_login.save()
    else:
        pass
    return render(request, 'home.html', context)

答案 1 :(得分:1)

if (user.last_login - user.date_joined).total_seconds() < 5:
    ... # do your code
    user.last_login = datetime.datetime.now()
    user.save()

last_logindate_joined都是DateTime实例,因此您需要直接比较它们。但是我建议您添加一些增量值,例如在示例中需要5秒才能确定