Django 身份验证变得简单:注册、登录和用户管理的完整指南

身份验证是几乎所有 Web 应用程序的核心。无论您是在构建简单的博客还是复杂的电子商务平台,安全高效地管理用户访问都至关重要。在本指南中,我们将分解 Django 的身份验证系统,以帮助您使用**基于功能的视图 (FBV)**无缝实现注册、登录、注销和用户管理。在本教程结束时,您将拥有一个功能齐全的系统,可以增强您的 Django 项目。

为什么使用 Django 进行身份验证?

Django 是一款高级 Python Web 框架,提供强大的内置身份验证工具。这些工具让开发人员无需重新设计轮子,而可以专注于其应用程序的独特功能。

Django 身份验证系统的主要优点包括:

  • 为登录和注册等常见任务预建表单和视图。
  • 轻松与您的数据库模型集成。
  • 安全会话和密码管理。
  • 基于功能的视图的分步概述

    1.设置你的Django项目和应用程序

    首先,创建一个新的 Django 项目和应用程序来开始:

    django-admin startproject myproject
    cd myproject
    python manage.py startapp accounts

    将您的应用添加到 `settings.py` 中的 `INSTALLED_APPS` 列表中:

    INSTALLED_APPS = [
        'accounts',
        'django.contrib.admin',
        'django.contrib.auth',
        # other apps
    ]

    2. 使用 UserCreationForm 进行用户注册

    Django 提供了 `UserCreationForm`,简化了用户注册。以下是使用 FBV 创建注册视图的方法:

    **views.py:**

    from django.shortcuts import render, redirect
    from django.contrib.auth.forms import UserCreationForm
    
    def register(request):
        if request.method == 'POST':
            form = UserCreationForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect('login')
        else:
            form = UserCreationForm()
        return render(request, 'accounts/register.html', {'form': form})

    为注册表单创建模板“register.html”,并将视图映射到“urls.py”中的URL:

    **urls.py:**

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('register/', views.register, name='register'),
    ]

    3. 在注册中添加自定义字段

    通过添加自定义字段(如“电子邮件”或“电话号码”)来增强注册表单:

    **表单.py:**

    from django import forms
    from django.contrib.auth.models import User
    from django.contrib.auth.forms import UserCreationForm
    
    class CustomUserCreationForm(UserCreationForm):
        email = forms.EmailField(required=True)
    
        class Meta:
            model = User
            fields = ('username', 'email', 'password1', 'password2')

    更新您的注册视图以使用新表单:

    **views.py:**

    from .forms import CustomUserCreationForm
    
    def register(request):
        if request.method == 'POST':
            form = CustomUserCreationForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect('login')
        else:
            form = CustomUserCreationForm()
        return render(request, 'accounts/register.html', {'form': form})

    4. 登录、注销和会话管理

    Django 可以高效地处理登录和注销。下面介绍如何使用 FBV 设置它们:

    **views.py:**

    from django.contrib.auth import authenticate, login, logout
    from django.shortcuts import render, redirect
    from django.contrib import messages
    
    # Login View
    def login_view(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('profile')
            else:
                messages.error(request, 'Invalid credentials')
        return render(request, 'accounts/login.html')
    
    # Logout View
    def logout_view(request):
        logout(request)
        return redirect('login')

    更新你的`urls.py`:

    urlpatterns = [
        path('login/', views.login_view, name='login'),
        path('logout/', views.logout_view, name='logout'),
    ]

    5. 自定义重定向

    登录或注销后,您可能希望将用户重定向到特定页面。这可以在您的 FBV 中处理(如上所示),也可以全局设置:

    **设置.py:**

    LOGIN_REDIRECT_URL = 'profile'
    LOGOUT_REDIRECT_URL = 'login'

    6. 将用户映射到数据库记录

    要将用户与特定的数据库记录关联,请修改您的模型以包含与“用户”模型的“ForeignKey”或“OneToOneField”关系。

    **模型.py:**

    from django.contrib.auth.models import User
    from django.db import models
    
    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        bio = models.TextField(blank=True)

    使用 Django 信号在用户注册时自动创建个人资料:

    **信号.py:**

    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from django.contrib.auth.models import User
    from .models import Profile
    
    @receiver(post_save, sender=User)
    def create_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)

    7. 保护观点

    使用 `@login_required` 限制对某些视图的访问:

    **views.py:**

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def profile(request):
        return render(request, 'accounts/profile.html')

    更新 `urls.py` 以包含个人资料视图:

    urlpatterns = [
        path('profile/', views.profile, name='profile'),
    ]

    总结

    在本指南中,我们介绍了使用基于函数的视图(FBV)在 Django 中设置身份验证的基本知识:

  • 使用自定义字段注册用户。
  • 管理登录、注销和重定向。
  • 将用户与数据库记录关联。
  • 有了这个基础,您就可以构建更高级的功能,如社交身份验证、密码重置或双因素身份验证。

    如需完整的现场演示,请在此处查看我的视频教程:立即观看

    祝你编码愉快!🚀