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

下面我会详细讲解“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_usercreate_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'

在这个示例中,我们创建了两个自定义用户模型:UserEmployeeUser 继承自 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技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 在Django中创建自己的自定义用户模型

    在 Django 中创建自己的自定义用户模型需要执行以下步骤: 创建一个新的 Django app 在项目的根目录下使用以下命令创建一个新的 Django 应用。 python manage.py startapp users 在新的应用中创建一个新的用户模型 在 users/models.py 文件中添加以下内容: from django.contrib.…

    Django 2023年5月16日
    00
  • Django中Forms的使用代码解析

    我来详细讲解一下“Django中Forms的使用代码解析”的攻略,包含两条示例说明。 一、什么是Django Forms Django Forms是用来收集并验证用户提交数据的工具,在Django中使用Forms可以方便地快速创建表单并进行表单的各项验证。Django Forms常用于与View视图函数一起配合使用,从而实现表单的各种处理功能。 二、Djan…

    Django 2023年5月15日
    00
  • django 从零开始 9 自定义密码验证加密

    先上想法,想对数据库账号的密码进行一个加密,但是django文档中的加密方法set_password貌似是只针对他们默认的user模型 或者继承 AbstractBaseUser的模型有效 from django.contrib.auth.models import AbstractBaseUser from django.contrib.auth.mode…

    Django 2023年4月13日
    00
  • Django Form常用功能及代码示例

    下面我将详细讲解“Django Form常用功能及代码示例”的完整攻略,包含两条示例说明。 1. Django Form常用功能 1.1 定义Form Django中的Form是用来处理表单数据的Python类。通过继承Django提供的forms.Form类,并定义相应的字段,我们可以快速创建自己的表单。 示例代码如下: from django impor…

    Django 2023年5月16日
    00
  • Django框架 信号调度原理解析

    Django框架 信号调度原理解析 什么是信号 在Django框架中,信号是一种轻量级的通信机制,在模型的某个事件发生时,允许接收信号的函数被调用。信号接收器是用于在特定时间监听特定模型的函数。 信号的作用 信号的主要作用就是当模型发生变化时自动调用某些函数,在特定的时间做一些特定的操作,比如在某个模型的数据被更新时,自动发送邮件通知相关的人员。 信号的种类…

    Django 2023年5月16日
    00
  • Linux下开发python django程序(设置admin后台管理上传文件和前台上传文件保存数据库)

    1.项目创建相关工作参考前面 2.在models.py文件中定义数据库结构 import django.db import modelsclass RegisterUser(models.Model): username=models.CharField(max_length=30) headImg = models.FileField(upload_to=…

    Django 2023年4月12日
    00
  • Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端原文链接:Django笔记二十三之条件表达式搜索、更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回。 这个操作类似于数据库中 if elif else 的逻辑。 以下是本篇笔记的目录: model 和数据准备 When 和 Case 操作新增字段返回 条件搜索 条件更新 条件…

    Django 2023年4月14日
    00
  • django中model下都有哪些方法

    通过名称检索模型的单个字段实例 _meta.get_field()返回给定一个字段名称的字段实例,如果没有找到具体给定的字段,将会引发一个FieldDoesNotExist 异常 from django.contrib.auth.models import User >>>User._meta.get_field(‘username’) &…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部