📅  最后修改于: 2023-12-03 14:40:47.625000             🧑  作者: Mango
在使用 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_user
和 create_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 的灵活性。