在 Django 中实现用户身份验证和授权

用户身份验证可确保用户可以安全地登录并访问其帐户。另一方面,授权决定了经过身份验证的用户被允许执行哪些操作。Django 提供了一个强大的身份验证系统,该系统易于集成和扩展,可用于这些目的。

设置默认身份验证系统

Django 的默认身份验证系统默认包含在其配置中。请确保以下应用列在 settings.pyINSTALLED_APPS 部分中:

'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

迁移数据库以设置必要的表:

python manage.py migrate

创建用户模型

Django 提供了内置用户模型,但您可以根据需要创建自定义模型。要使用默认模型:

from django.contrib.auth.models import User

# Creating a new user
user = User.objects.create_user(username='johndoe', password='securepassword')
user.email = 'johndoe@example.com'
user.save()

要创建自定义用户模型,请修改您的 models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=15, blank=True, null=True)

更新 settings.py 中的 AUTH_USER_MODEL 设置:

AUTH_USER_MODEL = 'yourapp.CustomUser'

处理用户登录和注销

Django 提供了用于登录和注销的内置视图。将以下 URL 添加到您的 urls.py

from django.urls import path
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

创建一个名为registration/login.html的简单登录模板:

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Log in</button>
</form>

使用权限限制访问

Django 提供了权限类来限制访问。要在视图中使用它们:

from django.contrib.auth.decorators import login_required, permission_required

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

@permission_required('yourapp.can_edit')
def edit_page(request):
    return render(request, 'edit_page.html')

可以使用 Django 管理员或通过 shell 分配权限:

from django.contrib.auth.models import User, Permission

user = User.objects.get(username='johndoe')
permission = Permission.objects.get(codename='can_edit')
user.user_permissions.add(permission)

结论

Django 的身份验证和授权系统为保护您的 Web 应用程序提供了坚实的基础。它具有高度可定制性,使您能够扩展其功能以满足特定要求。使用此系统,您可以轻松管理项目中的用户帐户、角色和权限。