欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > django从入门到精通(六)——auth认证及自定义用户

django从入门到精通(六)——auth认证及自定义用户

2025/2/24 15:05:11 来源:https://blog.csdn.net/weixin_42917352/article/details/143862527  浏览:    关键词:django从入门到精通(六)——auth认证及自定义用户

Django 提供了一个强大的用户认证系统,允许开发者轻松管理用户的注册、登录、权限和组等功能。以下是对 Django 用户认证系统的详细介绍,包括默认的用户认证、自定义用户认证和权限设置。

1. 默认用户认证

1.1 用户模型

Django 默认提供了一个用户模型 User,位于 django.contrib.auth.models 模块中。该模型包含以下字段:

  • username: 用户名,唯一。
  • password: 密码,经过哈希处理。
  • email: 电子邮件地址。
  • first_name: 名字。
  • last_name: 姓氏。
  • is_active: 布尔值,指示用户是否活跃。
  • is_staff: 布尔值,指示用户是否可以登录到管理后台。
  • is_superuser: 布尔值,指示用户是否为超级用户。
  • last_login: 用户最后登录时间。
  • date_joined: 用户注册时间。

1.2 用户注册

您可以使用 Django 表单来处理用户注册。以下是一个简单的用户注册视图示例:

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationFormdef 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, 'register.html', {'form': form})

1.3 用户登录

Django 提供了内置的登录视图,您可以使用 LoginView 来处理用户登录。

示例

from django.contrib.auth.views import LoginViewclass CustomLoginView(LoginView):template_name = 'login.html'  # 自定义登录模板

urls.py 中配置 URL:

from django.urls import path
from .views import CustomLoginViewurlpatterns = [path('login/', CustomLoginView.as_view(), name='login'),
]

1.4 用户登出

Django 也提供了内置的登出视图,您可以使用 LogoutView 来处理用户登出。

示例

from django.contrib.auth.views import LogoutViewurlpatterns = [path('logout/', LogoutView.as_view(), name='logout'),
]

1.5 用户认证

您可以使用 authenticate()login() 函数来手动处理用户认证。

from django.contrib.auth import authenticate, logindef 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')else:# 返回错误信息...

2. 自定义用户认证

如果您需要更复杂的用户模型,可以通过扩展 AbstractUserAbstractBaseUser 来创建自定义用户模型。

2.1 使用 AbstractUser

通过继承 AbstractUser,您可以添加额外的字段。

from django.contrib.auth.models import AbstractUser
from django.db import modelsclass CustomUser(AbstractUser):phone_number = models.CharField(max_length=15, blank=True, null=True)

settings.py 中指定自定义用户模型:

AUTH_USER_MODEL = 'yourapp.CustomUser'

2.2 使用 AbstractBaseUser

如果您需要完全控制用户模型,可以继承 AbstractBaseUser

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import modelsclass CustomUserManager(BaseUserManager):def create_user(self, email, password=None, **extra_fields):if not email:raise ValueError('The Email field must be set')email = self.normalize_email(email)user = self.model(email=email, **extra_fields)user.set_password(password)user.save(using=self._db)return userdef create_superuser(self, email, password=None, **extra_fields):extra_fields.setdefault('is_staff', True)extra_fields.setdefault('is_superuser', True)return self.create_user(email, password, **extra_fields)class CustomUser(AbstractBaseUser):email = models.EmailField(unique=True)first_name = models.CharField(max_length=30)last_name = models.CharField(max_length=30)is_active = models.BooleanField(default=True)is_staff = models.BooleanField(default=False)objects = CustomUserManager()USERNAME_FIELD = 'email'REQUIRED_FIELDS = ['first_name', 'last_name']

2.3 创建和迁移自定义用户模型

在定义自定义用户模型后,您需要创建和应用迁移:

python manage.py makemigrations
python manage.py migrate

3. 权限设置

Django 的用户认证系统还提供了权限管理功能。每个用户可以被分配不同的权限。

3.1 权限模型

Django 默认提供了三种权限:

  • add: 添加对象的权限。
  • change: 修改对象的权限。
  • delete: 删除对象的权限。

您可以在模型中自定义权限:

class Blog(models.Model):title = models.CharField(max_length=200)content = models.TextField()class Meta:permissions = [('can_publish', 'Can Publish Blog'),]

3.2 检查权限

您可以使用 user.has_perm() 方法检查用户是否具有特定权限。

if request.user.has_perm('yourapp.can_publish'):# 用户有发布权限...

3.3 组管理

Django 允许将用户分组,以便于管理权限。您可以创建组并为组分配权限。

from django.contrib.auth.models import Group# 创建组
group, created = Group.objects.get_or_create(name='Editors')# 添加权限
group.permissions.add(permission)# 将用户添加到组
user.groups.add(group)

4. 总结

  • 默认用户认证:Django 提供了内置的用户模型和认证视图,支持用户注册、登录和登出。
  • 自定义用户认证:可以通过继承 AbstractUserAbstractBaseUser 创建自定义用户模型。
  • 权限设置:Django 提供了权限管理功能,允许为用户和组分配权限。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词