🔐 Lesson 55: Django Authentication (Login, Logout, User Management)
1. What Is Django Authentication?
In short → Django's authentication system is a built-in system that verifies user identity and provides access control. Django automatically handles login, logout, password hashing, session management, and more.
In other words → Django authentication handles user identity, login/logout, password hashing, and session management.
2. Why Use Django Authentication?
- Gives you built-in support for user management
- Hashes and stores passwords securely
- Session and cookie management already included
- Connects seamlessly with the admin panel
3. Summary
✅ Django authentication = built-in user management system
✅ Register → UserCreationForm
✅ Login → authenticate() + login()
✅ Logout → logout()
✅ Restrict access → @login_required
python
# ===== 1. User Registration =====
print("===== Registration Form =====")
print("# forms.py")
print("from django import forms")
print("from django.contrib.auth.forms import UserCreationForm")
print("")
print("class RegisterForm(UserCreationForm):")
print(" email = forms.EmailField()")
print("")
print(" class Meta:")
print(" model = User")
print(" fields = ['username', 'email', 'password1', 'password2']")
print("")
print("# views.py")
print("def register(request):")
print(" if request.method == 'POST':")
print(" form = RegisterForm(request.POST)")
print(" if form.is_valid():")
print(" form.save()")
print(" return redirect('login')")
print(" else:")
print(" form = RegisterForm()")
print(" return render(request, 'register.html', {'form': form})")
# ===== 2. User Login =====
print(f"\n===== Login View =====")
print("from django.contrib.auth import authenticate, login")
print("")
print("def user_login(request):")
print(" if request.method == 'POST':")
print(" username = request.POST['username']")
print(" password = request.POST['password']")
print(" user = authenticate(request, username=username, password=password)")
print(" if user is not None:")
print(" login(request, user)")
print(" return redirect('home')")
print(" return render(request, 'login.html')")
# ===== 3. User Logout =====
print(f"\n===== Logout View =====")
print("from django.contrib.auth import logout")
print("")
print("def user_logout(request):")
print(" logout(request)")
print(" return redirect('login')")
# ===== 4. Restricting Access =====
print(f"\n===== Login Required =====")
print("from django.contrib.auth.decorators import login_required")
print("")
print("@login_required")
print("def dashboard(request):")
print(" return render(request, 'dashboard.html')")
print("")
print("# If user not logged in, redirects to login page")
# ===== 5. Login Template =====
print(f"\n===== login.html =====")
print("<!DOCTYPE html>")
print("<html>")
print("<body>")
print(" <form method='post'>")
print(" {% csrf_token %}")
print(" <input type='text' name='username' placeholder='Username'><br>")
print(" <input type='password' name='password' placeholder='Password'><br>")
print(" <button type='submit'>Login</button>")
print(" </form>")
print("</body>")
print("</html>")
# ===== 6. Real-World Use Cases =====
print(f"\n===== Use Cases =====")
print("✅ Blog → Only logged-in users can create posts")
print("✅ E-commerce → User accounts for orders, payments")
print("✅ Social media → Profile, friends, messages")
print("✅ Company apps → Employee login, role-based access")You should see
===== Registration Form ===== # forms.py from django import forms from django.contrib.auth.forms import UserCreationForm class RegisterForm(UserCreationForm): email = forms.EmailField() class Meta: model = User fields = ['username', 'email', 'password1', 'password2'] # views.py def register(request): if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): form.save() return redirect('login') else: form = RegisterForm() return render(request, 'register.html', {'form': form}) ===== Login View ===== from django.contrib.auth import authenticate, login def user_login(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return redirect('home') return render(request, 'login.html') ===== Logout View ===== from django.contrib.auth import logout def user_logout(request): logout(request) return redirect('login') ===== Login Required ===== from django.contrib.auth.decorators import login_required @login_required def dashboard(request): return render(request, 'dashboard.html') # If user not logged in, redirects to login page ===== login.html ===== {% csrf_token %} Login ===== Use Cases ===== ✅ Blog → Only logged-in users can create posts ✅ E-commerce → User accounts for orders, payments ✅ Social media → Profile, friends, messages ✅ Company apps → Employee login, role-based access