Episode 22 of 32
Logging Users In
Authenticate users and create sessions — validate credentials with AuthenticationForm, call login() to start a session.
Logging Users In
Now let us handle the POST request — validate the credentials and log the user in by creating a session.
Updated Login View
# accounts/views.py
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import AuthenticationForm
def login_view(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
# Authenticate the user
user = form.get_user()
# Log them in (create session)
login(request, user)
return redirect('articles:list')
else:
form = AuthenticationForm()
return render(request, 'accounts/login.html', {
'form': form
})
The Flow
POST /accounts/login/
↓
AuthenticationForm validates credentials
↓
form.get_user() returns the authenticated user
↓
login(request, user) creates a session
↓
redirect to articles list
What login() Does
login(request, user)
# Internally:
# 1. Creates a session in the database
# 2. Sends a session cookie to the browser
# 3. Subsequent requests include the cookie
# 4. Django sets request.user to the logged-in user
Key Takeaways
AuthenticationForm(data=request.POST)validates username and passwordform.get_user()returns the authenticated user objectlogin(request, user)creates a session — the user stays logged in- After login,
request.useris the logged-in user on all subsequent requests