Есть ли способ получить время последнего выхода пользователя из системы? Пример Django user.last_logout (существует ли что-то подобное) - PullRequest
0 голосов
/ 18 декабря 2018

Вступление: У меня есть 3 модели user, post, group.Пользователь может создавать сообщения, однако каждое сообщение должно принадлежать группе.Пользователи должны выбирать из существующих групп для своих сообщений.Пользователи не могут добавлять, удалять, обновлять группы.

Более того:

Пользователи могут становиться членами групп и при нажатии на определенную группу.Они видят все сообщения в этой группе.

Что я хочу Когда пользователи заходят на домашнюю страницу, они видят записи, которые были добавлены с момента последнего входа в систему

enter image description here

Мои модели

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')
    group = models.ForeignKey(Group, related_name='posts')
    title = models.CharField(max_length=250, unique=True)
    message = models.TextField()
    created_at = models.DateTimeField(auto_now=True)

Мои просмотры

class Homepage(TemplateView):
    template_name = 'home.html'

    def get_context_data(self, **kwargs):
        context = super(Homepage, self).get_context_data(**kwargs)  
        if self.request.user.is_authenticated():
            context['object_list'] = Group.objects.filter(members=self.request.user)

            #The last login actually shows the users current login time as the last login. Which makes the below line of code useless
            new_posts = Post.objects.filter(created_at__gt=self.request.user.last_login).count()
            context['new_posts'] = new_posts
         else:
              context['object_list'] = Group.objects.all()
        return context

В моих шаблонах у меня есть

<div class="list-group">
   {% for group in object_list %}        
       {% if not new_posts %}
               {{group.post.count}}
        {% else %}
                {{new_posts}}
        {% endif %}
    {% endfor %}
</div>

Проблема: Последний вход в систему фактически показывает текущее время входа пользователя в качестве последнего входа.Есть ли способ получить время последнего выхода пользователя из системы, а не время последнего входа в систему? User.last_logout

У меня есть ответ ниже, но он мне не подходит Django creation_at__gt = self.request.user.last_login работает только с пользователями, которые уже вошли в систему.

Функция создания моего профиля

def signup(request):
    if request.method == 'POST':
        form = UserCreateForm(request.POST or None)
        if form.is_valid():
            new_user = form.save()
            Profile.objects.create(user=new_user)
            return redirect('accounts:edit_profile')

1 Ответ

0 голосов
/ 18 декабря 2018

вот пример

 class ProfileModel(models.Model):
     #fields
     last_time_logout = models.DateTimeField() 

В пользовательском представлении запишите последний выход из системы

 import datetime

 def signout(request):
     profile = reques.user.profile # it depends 
     if request.is_ajax(): # Do it with ajax
          logout(request)
          profile.last_time_logout = datetime.datetime.now()
          profile.save()
          return redirect("signin")
     raise PermissionDenied
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...