From 1df88d27c04ec7b0c23ddbbce5ae4edabafeffe7 Mon Sep 17 00:00:00 2001 From: Yash Maheshwari Date: Thu, 1 Oct 2020 23:33:59 +0530 Subject: [PATCH] Added the functionality to get the total time spent by the user in a session --- mysite/users/__init__.py | 31 +++++++++++++++++++++++++++++++ mysite/users/models.py | 4 ++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/mysite/users/__init__.py b/mysite/users/__init__.py index e69de29..af895c9 100644 --- a/mysite/users/__init__.py +++ b/mysite/users/__init__.py @@ -0,0 +1,31 @@ +from django.contrib.auth.signals import user_logged_out, user_logged_in +from django.dispatch import receiver +from time import perf_counter +from .models import Profile + +log_in_time = 0 +log_out_time = 0 +total_time_spent = 0 + +@receiver(user_logged_in) +def log_in(sender, user, request, **kwargs): + global log_in_time + log_in_time = perf_counter() + +@receiver(user_logged_out) +def log_out(sender, user, request, **kwargs): + global log_out_time + log_out_time = perf_counter() + calculate_total_time(user) + +def calculate_total_time(user): + global log_in_time + global log_out_time + global total_time_spent + total_time_spent = log_out_time - log_in_time + save_time(total_time_spent, user) + +def save_time(total_time_spent, user): + p = Profile.objects.raw('SELECT user from Profile WHERE user = %s', [user]) + + p.save() diff --git a/mysite/users/models.py b/mysite/users/models.py index e8de921..f124e18 100644 --- a/mysite/users/models.py +++ b/mysite/users/models.py @@ -1,13 +1,13 @@ from django.db import models from django.contrib.auth.models import User - # Create your models here. class Profile(models.Model): user= models.OneToOneField(User, on_delete=models.CASCADE) image = models.ImageField(default='admin/default.jpg',upload_to='profile_pics') bio = models.CharField(max_length=50, null=True, blank=True) + timespent = models.FloatField(default=0) def __str__(self): - return f'{self.user.username} profile' \ No newline at end of file + return f'{self.user.username} profile'