📜  django 自定义用户模型 - Python (1)

📅  最后修改于: 2023-12-03 14:40:47.625000             🧑  作者: Mango

Django 自定义用户模型

简介

在使用 Django 开发项目时,我们会用到 Django 自带的用户模型 User。但是在一些情况下,我们需要自定义用户模型来满足具体的需求。Django 提供了一种方便的方式来实现自定义用户模型。

创建自定义用户模型
创建应用

首先,我们需要创建一个新的应用来存放自定义用户模型。在命令行中运行以下命令:

python manage.py startapp accounts

其中,accounts 是应用的名称,可以根据实际情况进行命名。

定义用户模型

我们需要在 accounts 应用下的 models.py 文件中定义自定义用户模型。以下是一个示例代码:

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models


class UserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        """
        创建普通用户
        """
        if not email:
            raise ValueError('必须提供电子邮件地址')

        user = self.model(
            email=self.normalize_email(email),
            **extra_fields
        )
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, email, password, **extra_fields):
        """
        创建超级用户
        """
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError('超级用户必须是员工')
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('超级用户必须是超级用户')

        return self.create_user(email, password, **extra_fields)


class User(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)
    is_superuser = models.BooleanField(default=False)
    date_joined = models.DateTimeField(auto_now_add=True)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name']

    def __str__(self):
        return self.email

在上面的代码中,我们定义了一个自定义用户模型 User,该模型继承自 Django 提供的 AbstractBaseUser 类,同时我们也定义了自己的用户管理器 UserManager,以及 User 模型的字段。

UserManager 中,我们定义了两种创建用户的方法,create_usercreate_superuser。其中,create_user 方法创建普通用户,create_superuser 方法创建超级用户。我们可以根据实际情况来定义这两种方法。

注册用户模型

接下来,我们需要在 settings.py 文件中注册自定义用户模型。

AUTH_USER_MODEL = 'accounts.User'

其中,accounts.User 是我们在 accounts 应用中定义的用户模型。

使用自定义用户模型

在使用自定义用户模型时,我们可以像使用 Django 自带的用户模型一样使用我们定义的自定义用户模型。以下是一些示例代码:

from django.contrib.auth import get_user_model

User = get_user_model()

# 创建普通用户
user = User.objects.create_user(
    email='user@email.com',
    password='password',
    first_name='John',
    last_name='Doe'
)

# 创建超级用户
superuser = User.objects.create_superuser(
    email='admin@email.com',
    password='password',
    first_name='Admin',
    last_name='User'
)

# 验证用户
authenticated_user = authenticate(
    request,
    email=email,
    password=password
)

在上面的代码中,我们通过 get_user_model 方法来获取自定义用户模型。创建用户、创建超级用户、验证用户等操作都与使用 Django 自带的用户模型相同。

总结

通过本文介绍,我们学习了如何创建自定义用户模型,并在 Django 项目中使用自定义用户模型。自定义用户模型可以满足我们更加具体的需求,增强了 Django 的灵活性。