下面我会详细讲解“Django3中的自定义用户模型实例详解”的完整攻略,过程中将会包含两条示例说明。
什么是Django3中的自定义用户模型?
在Django3中,用户模型是一个具有以下属性的模型:
- 用户名
- 电子邮件地址
- 密码
- 是否是超级用户
除此之外,还可以添加其他自定义字段。当创建一个新的Django3项目时,会自动创建一个名为User
的用户模型。但是,有时候默认用户模型无法满足我们的需求,需要自定义用户模型。
在Django3中自定义用户模型的步骤
下面是在Django3中自定义用户模型的步骤。
第一步:创建一个新的Django3项目
首先,你需要在本地计算机上创建一个新的Django3项目。
$ django-admin startproject <project_name>
第二步:创建自定义用户模型
创建一个指定的应用程序,命名为“accounts”(或您喜欢的其他名称):
$ python manage.py startapp accounts
在models.py
文件中,你需要创建一个新的用户模型。以下是一个示例:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
在这个示例中,我们从AbstractUser
模型来继承CustomUser
模型。我们添加了一个名为age
的额外字段,这个字段是可选的。
第三步:配置settings.py
修改您的settings.py
文件,指定您的新自定义用户模型:
AUTH_USER_MODEL = 'accounts.CustomUser'
第四步:执行迁移
现在,你可以执行迁移,将自定义用户模型添加到数据库中:
$ python manage.py makemigrations
$ python manage.py migrate
现在,你已经创建了自定义用户模型,并将其添加到项目中。
示例1:在Django3中使用自定义用户模型
接下来,我会通过一个示例,演示如何在Django3项目中使用自定义用户模型。
第一步:创建一个新的Django3项目
在本地计算机上创建一个新的Django3项目,并创建一个名为accounts
的应用程序(参见上面的步骤)。
第二步:创建自定义用户模型
在models.py
中,创建一个新的自定义用户模型:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
def __str__(self):
return self.username
在这个示例中,我们继续从AbstractUser
模型中继承,添加了一个可选字段age
。我们还添加了一个__str__
方法,用于在Django管理面板中显示用户的用户名。
第三步:配置settings.py
修改settings.py
文件,将您的新自定义用户模型指定为项目的默认用户模型:
AUTH_USER_MODEL = 'accounts.CustomUser'
第四步:添加用户管理器
接下来,您需要为您的自定义用户模型指定一个用户管理器。在您的accounts/models.py
文件中,添加以下内容:
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password, **extra_fields):
"""
Creates and saves a User with the given email and password.
"""
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()
return user
def create_superuser(self, email, password, **extra_fields):
"""
Creates and saves a superuser with the given email and password.
"""
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password, **extra_fields)
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
objects = CustomUserManager()
def __str__(self):
return self.email
在这个示例中,我们创建了一个名为CustomUserManager
的用户管理器,这个管理器继承自BaseUserManager
。我们为该管理器创建了两种方法:create_user
和create_superuser
来创建普通用户和超级用户。
第五步:执行迁移
现在,你可以执行迁移,将自定义用户模型添加到数据库中:
$ python manage.py makemigrations
$ python manage.py migrate
第六步:使用自定义用户模型
在系统中使用您的自定义用户模型与使用默认用户模型相同。你只需像以前一样导入Django的内置user模型即可:
from django.contrib.auth import get_user_model
User = get_user_model()
你可以创建一个新的自定义用户:
user = User.objects.create_user(
username='john',
email='john@example.com',
password='password'
)
或者,你可以创建一个超级用户:
admin_user = User.objects.create_superuser(
email='admin@example.com',
password='password'
)
现在,您已经成功地创建了自定义用户模型,并且可以使用您的自定义用户模型在Django3项目中进行身份验证。
示例2:在Django3中使用两个用户模型
下面是在一个Django3项目中使用两个用户模型的示例,这有时是很有用的一个场景。
第一步:创建一个新的Django3项目
在本地计算机上创建一个新的Django3项目,并创建一个名为accounts
的应用程序(参见上面的步骤)。
第二步:创建两个自定义用户模型
创建accounts/models.py
文件,并添加两个自定义用户模型:
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
class UserManager(BaseUserManager):
def create_user(self, email, password, **extra_fields):
"""
Creates and saves a User with the given email and password.
"""
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()
return user
def create_superuser(self, email, password=None, **extra_fields):
"""
Creates and saves a superuser with the given email and password.
"""
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
class Employee(User):
employee_num = models.CharField(max_length=10, unique=True)
class Meta:
verbose_name = 'employee'
verbose_name_plural = 'employees'
在这个示例中,我们创建了两个自定义用户模型:User
和 Employee
。 User
继承自 AbstractBaseUser, PermissionsMixin
,并使用电子邮件地址作为主要字段。Employee
继承自 User
。除了User
模型中的字段外,Employee
模型还包含一个新字段employee_num
。注意Employee
是如何继承User
模型的。
第三步:配置settings.py
修改settings.py
文件,将您的新自定义用户模型指定为项目的默认用户模型:
AUTH_USER_MODEL = 'accounts.User'
第四步:执行迁移
现在,你可以执行迁移,将自定义用户模型添加到数据库中:
$ python manage.py makemigrations
$ python manage.py migrate
第五步:使用两个用户模型
你可以像使用任何Django模型那样使用这两个自定义用户模型:
from django.contrib.auth import get_user_model
User = get_user_model()
Employee = User.employee
user = User.objects.create_user(
email='john@example.com',
password='password'
)
employee = Employee.objects.create_user(
email='smith@example.com',
password='password',
employee_num='00001'
)
现在,你已经在一个Django3项目中使用了两个自定义用户模型。
以上是“Django3中的自定义用户模型实例详解”的完整攻略,并且包含了两个示例。希望对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django3中的自定义用户模型实例详解 - Python技术站