Django - Проверка, если пользователь вошел в систему раньше - PullRequest
0 голосов
/ 11 марта 2020

когда пользователь регистрируется, он перенаправляется на домашнюю страницу. Если это их первый вход в систему, я хочу отобразить div, однако, если это не первый раз, я не хочу, чтобы этот div появлялся. В настоящее время я полагаюсь на date_joined и last_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)

template:

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

        </div>
    {% endif %}

Кто-нибудь знает, как Я могу изменить это так, чтобы он работал с текущим временем, а не с текущей датой. Таким образом, div отображается только при первом входе пользователя. Кто-нибудь знает решение? Спасибо. Также date_joined и last_login являются объектами даты и времени, хранящимися в базе данных.

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Вместо использования last_login и date_joined рассмотрите возможность создания модели UserProfile с атрибутом is_first_login, подробнее о UserProfile можно прочитать здесь .

В ваших models.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 голос
/ 11 марта 2020
if (user.last_login - user.date_joined).total_seconds() < 5:
    ... # do your code
    user.last_login = datetime.datetime.now()
    user.save()

И last_login, и date_joined являются экземплярами DateTime, поэтому вам нужно сравнить их напрямую. Но я рекомендую вам добавить дельту, например, 5 секунд, прежде чем быть уверенным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...