我想在django中将用户活动添加到数据库中

我想在django中将用户活动添加到数据库中,django,django-models,Django,Django Models,我想将每个用户的登录和注销时间添加到数据库中 在我的模型中,我不知道如何创建它 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.CharFi

我想将每个用户的登录和注销时间添加到数据库中

在我的模型中,我不知道如何创建它

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>")
@csrf\u豁免
def仪表板(请求):
如果request.method==“POST”:
如果User.objects.filter(username=request.POST['username'],
password=request.POST['password'])。存在()
全球用户
user=user.objects.get(username=request.POST['username'],
password=request.POST['password'])
act=User.objects.get(id=User.id)
act.login\u time=datetime.now()
保存
返回呈现(请求'dash.html',{'user':user,})
其他:
返回呈现(请求'index.html')
@豁免
def注销(请求):
如果request.method==“POST”:
act=User.objects.get(id=User.id)
act.logout_time=datetime.now()
保存
返回呈现(请求'index.html')
其他:
返回HttpResponse(“注销时出错..!!”)

有人能帮我解决这个问题吗?

您添加了默认值datetime.now(),它将这些列的值设置为迁移运行的时间。这就是为什么默认情况下,而不是当前时间,您将始终具有该固定值

像这样试试

from django.utils import timezone

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

这将使用当前时间更新默认值

您已添加datetime.now()的默认值,它将这些列的值设置为迁移运行时的时间。这就是为什么默认情况下,而不是当前时间,您将始终具有该固定值

像这样试试

from django.utils import timezone

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

这将使用当前时间更新默认值

您不创建id,默认情况下,id=pk存在 当您检查用户名或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

您不创建id,默认情况下,id=pk存在 当您检查用户名或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

activity=models.DateTimeField(login\u time=models.DateTimeField(default=timezone.now()),logout\u time=models.DateTimeField(default=timezone.now()),是否可以使用上述模型…?只需从now中删除()即可。之后,它将选择每个请求的当前时间,而不是固定的时间活动=models.DateTimeField(login\u time=models.DateTimeField(default=timezone.now()),注销\u time=models.DateTimeField(default=timezone.now()),是否可以使用上述模型…?只需从现在删除()。之后,它将根据每个请求选择当前时间,而不是固定时间