在Django中创建自定义用户模型:从配置到迁移的完整指南
本文详细介绍如何在Django项目中创建自定义用户模型,以支持使用电子邮件代替用户名进行登录。通过继承AbstractBaseUser和BaseUserManager,定义包含邮箱、姓名等字段的User类,并配置UserManager处理用户创建与密码哈希。文章涵盖项目初始化、应用创建、模型代码编写、settings.py配置以及数据库迁移命令,帮助开发者实现灵活的用户认证系统。
为什么需要自定义用户模型?
构建独立的自定义用户模型至关重要。若未来需要对用户数据结构进行调整,拥有自定义模型可大幅降低修改成本;反之,若依赖默认模型,则可能引发代码多处重构。在某些业务场景下,使用电子邮件而非用户名进行身份验证更为合理。因此,为程序员而言,掌握自定义用户模型的开发是一项必备技能。
本文将指导您根据具体需求构建自定义用户模型,请按照以下步骤操作。
Django安装- 创建Django应用
- 该应用程序的自定义模型
- 迁移数据库
1. Django安装
完成Django环境配置后,进入已创建的工作目录。随后,通过以下命令初始化Django项目。
django-admin startproject mysite
2.创建Django应用
若您观察到某些网站采用类似/ accounts /格式的URL,这通常意味着其代码结构专业且规范。为此,我们需要创建一个名为accounts的应用程序,专门负责管理与账户相关的所有逻辑。在当前环境中,请使用以下命令创建Django应用。
python manage.py startapp accounts
应用创建完成后,将自动生成基础文件结构。
生成的文件目录结构如下所示:
accounts/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py所有数据库模型相关的代码均应编写在models.py文件中。此外,务必创建一个urls.py文件,以便通过账户应用路由链接。完成上述步骤后,我们将进入根据需求构建自定义用户模型的关键环节。
3.该应用程序的自定义模型
为创建自定义用户模型,需在models.py文件中编写以下代码,因为Python利用对象来管理和访问存储在数据库中的数据。
以下是models.py文件的完整代码:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser , BaseUserManager
import uuid
class UserManager(BaseUserManager):
def create_user(self, email, firstname, lastname, phone,password=None):
user = self.model(
email = self.normalize_email(email),
firstname = firstname,
lastname = lastname,
phone = phone,
)
user.set_password(password)
user.save(using = self._db)
return user
def create_superuser(self, email,firstname,lastname,phone,password=None):
user = self.create_user(
email=email,
password=password,
firstname = firstname,
lastname = lastname,
phone = phone,
)
user.is_admin = True
user.is_staff = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
id = models.CharField(max_length=200, default=uuid.uuid4,unique=True,primary_key=True)
email = models.EmailField(null=False, max_length=100,unique=True)
firstname = models.CharField(null=False, max_length=100)
lastname = models.CharField(null=False, max_length=100)
phone = models.IntegerField(null=False,unique=True)
date_joined = models.DateTimeField(auto_now=True)
last_login = models.DateTimeField(auto_now=True)
is_admin = models.BooleanField(default = False)
is_active = models.BooleanField(default = True)
is_staff = models.BooleanField(default = False)
is_superuser = models.BooleanField(default = False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['firstname','lastname','phone']
objects = UserManager()
def __str__(self):
return self.email + ", " + self.firstname
def has_perm(self, perm, obj = None):
return self.is_admin
def has_module_perms(self, app_label):
return TrueUser类定义了表的字段及结构,用于存储用户详细信息并施加特定约束。为管理User类,我们引入了UserManager,它用于创建普通用户或超级用户。正如前文所述,此处的用户名字段将被电子邮件取代,这比传统的用户名字段更具实际意义。同时,代码中明确列出了必填字段。通过指定电子邮件作为用户标识字段,系统会自动将电子邮件字段标记为必需项。
借助UserManager,我们可以创建新的普通用户和超级用户。user.set_password()方法会将纯文本密码转换为默认的哈希算法。Django框架使用PBKDF2结合SHA-256哈希算法,并具备密码扩展机制。user.save()函数负责使用指定字段和哈希后的密码保存创建的用户。创建自定义用户模型的过程相对简单。
需注意,在迁移模型之前请勿执行迁移操作。在创建模型后,必须使用自定义模型更新Django设置文件,否则Django将回退使用其内置的默认模型。只需在项目目录下的settings.py文件中添加以下代码即可。
AUTH_USER_MODEL = ‘accounts.User'
模型配置完毕后,接下来需将模型迁移至数据库。
4.迁移模型
现在,我们准备通过将更改迁移到数据库中来完成自定义用户模型的部署。在当前环境中,使用以下命令执行迁移并运行代码。
python manage.py makemigrations
python manage.py migrate此命令将扫描Django项目中的所有模型及模型内的变更。若需针对特定应用程序进行迁移,可使用以下命令执行。
python manage.py makemigrations <app_name>
python manage.py migrate <app_name>可将命令中的占位符替换为accounts,以仅对该应用程序执行变更。
至此,关于在Django中创建自定义用户模型的介绍已结束。如需了解更多Django中创建自定义用户模型的相关内容,请搜索本站历史文章或继续浏览后续文章。希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













