Login
网站首页 > 文章中心 > 其它

Django3中的自定义用户模型实例详解

作者:小编 更新时间:2023-08-16 07:27:11 浏览量:191人看过

什么是Django3中的自定义用户模型?

用户名

电子邮件地址

密码

是否是超级用户

在Django3中自定义用户模型的步骤

第一步:创建一个新的Django3项目


$ django-admin startproject 


第二步:创建自定义用户模型

创建一个指定的应用程序,命名为"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项目

第二步:创建自定义用户模型

在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'
)


示例2:在Django3中使用两个用户模型

第一步:创建一个新的Django3项目

第二步:创建两个自定义用户模型

创建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


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'
)


以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章