я хочу добавить активность пользователя в базу данных в django - PullRequest
0 голосов
/ 27 мая 2020

я хочу добавить время входа и выхода каждого пользователя в базу данных

в моей модели я не знаю, как ее создать

model.py

class User(models.Model):
    id = models.AutoField(primary_key=True, unique=True)
    name = models.CharField(max_length=20)
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    timezone = models.CharField(max_length=32, choices=TIMEZONES,default='UTC')
    login_time = models.DateTimeField(default=datetime.now())
    logout_time = models.DateTimeField(default=datetime.now())
    def __str__(self):
        return self.name

Каждый раз, когда пользователь входит в систему или выходит из системы, текущая активность сохраняется

views.py

@csrf_exempt
def dash_board(request):
    if request.method == 'POST':
        if User.objects.filter(username=request.POST['username'], 
            password=request.POST['password']).exists():
            global user
            user = User.objects.get(username=request.POST['username'], 
            password=request.POST['password'])


            act = User.objects.get(id=user.id)
            act.login_time = datetime.now()
            act.save()
            return render(request, 'dash.html', {'user': user, })

        else:
            return render(request, 'index.html')


@csrf_exempt
def logout(request):
    if request.method == "POST":
        act = User.objects.get(id=user.id)
        act.logout_time=datetime.now()
        act.save()
        return render(request,'index.html')
    else:
        return HttpResponse("<h1>Error While LogOut..!!</h1>")

Может ли кто-нибудь помочь мне решить эту проблему

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Вы не создаете идентификатор, он существует по умолчанию по id = pk То же самое в имени пользователя и пароле django при проверке имени пользователя или пароля user.password он существует в django

          class User(models.Model):
                 name = models.CharField(max_length=20)
                 login_time = 
                 models.DateTimeField(default=timezone.now)
                 logout_time = 
                 models.DateTimeField(default=timezone.now)
                 def __str__(self):
                     return self.name
1 голос
/ 27 мая 2020

Вы добавили значение по умолчанию для datetime.now (), которое установит значения этих столбцов на время выполнения миграции. Вот почему по умолчанию вместо текущего времени у вас всегда будет это фиксированное значение.

Попробуйте это так

from django.utils import timezone

login_time = models.DateTimeField(default=timezone.now)
logout_time = models.DateTimeField(default=timezone.now)

Это обновит значение по умолчанию с текущим временем

...