Reputation: 81
i made a django app which contains a user login form. I have used MySQL database in the app. when the user logs-in an entry of name and Hashed Password is created in the database. As of now i m trying, to get the datetime in the database when the user logs-In.
here's the code
form.py
from django import forms
from django.contrib.auth.hashers import make_password
from django.core import validators
from first_app.models import Login
from django.contrib.auth.models import User
#some other code
class authForm(forms.ModelForm):
class Meta:
model= Login
fields = ["username","password",]
models.py
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
# Create your models here.
class Login(models.Model):
username = models.CharField(max_length=50)
password = models.CharField(max_length=32)
date_and_time = models.DateField(auto_now_add=True) #<-- tried to add but it shows a non editable field
def __str__(self):
return self.username
Views.py
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .forms import authForm
#from django.contrib.sessions import serializers
# Create your views here.
def login_view(request):
context = {}
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
authform_data = authForm (request.POST or None)
user = authenticate(request, username=username, password=password)
if user:
login(request, user)
authform_data.save()
return HttpResponseRedirect(reverse('IP form'))
else:
messages.error(request,'Please provide valid credentials')
return render (request,"first_app/login.html", context)
else:
return render (request,"first_app/login.html", context)
I want to store the datetime Everytime the user logs-In
thnx for the help. :-)
Upvotes: 0
Views: 726
Reputation: 32294
The built in User
model has an attribute last_login
that stores what you are asking for
Your custom user model doesn't seem to add any functionality that the built in user doesn't have, might be best to just use auth.User
EDIT:
To store every login time for every user would be best stored in it's own model
class UserLogin(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
time = models.DatetimeField(auto_now_add=True)
There is a signal sent every time a user logs in user_logged_in
, you can hook up this signal to a function that creates a UserLogin
entry every time a user logs in
from django.contrib.auth.signals import user_logged_in
from django.dispatch import receiver
@receiver(user_logged_in)
def my_callback(sender, request=None, user=None):
UserLogin.objects.create(user=user)
Now you will have a UserLogin
object for every login for each user
Upvotes: 0
Reputation: 1847
You can define a login event model and create instance every time a user is logged-in. Here is an example:
# models.py
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
class LoginEvent(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
date_and_time = models.DateField(auto_now_add=True)
class Login(models.Model):
username = models.CharField(max_length=50)
password = models.CharField(max_length=32)
date_and_time = models.DateField(auto_now_add=True)
def __str__(self):
return self.username
Then in your views:
from datetime import datetime
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .forms import authForm
from .models import Login, LoginEvent
def login_view(request):
context = {}
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
authform_data = authForm(request.POST or None)
user = authenticate(request, username=username, password=password)
if user:
login(request, user)
# here, create your event object
login_event = LoginEvent.objects.create(user=user)
authform_data.save()
return HttpResponseRedirect(reverse('IP form'))
else:
messages.error(request,'Please provide valid credentials')
return render (request,"first_app/login.html", context)
else:
return render (request,"first_app/login.html", context)
Upvotes: 1