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 Form 效验

    Django 登入效验 .py from django import forms from student import models from django.core.exceptions import ValidationError from django.core.validators import RegexValidator class RegFo…

    Django 2023年4月10日
    00
  • Django中的用户身份验证示例详解

    下面我就为您详细讲解 “Django中的用户身份验证示例详解”。这篇文章主要探讨 Django web开发框架中的用户身份验证,包括两个示例,分别涉及当用户已登录和当用户未登录时的两种情况。 示例1:用户已登录 在Django中,可以使用 @login_required 装饰器来限制只有已经登录的用户才能访问某些视图函数。下面是一个示例: from djan…

    Django 2023年5月16日
    00
  • Django+Vue打造购物网站(四)

    首页商品类别数据显示 商品分类接口 大概需要两个,一个显示三个类别 一个显示类别及类别下的全部商品 现在开始写商品的接口首先编写三个分类的serializer class CategorySerializer3(serializers.ModelSerializer): ”’ 三级分类 ”’ class Meta: model = GoodsCatego…

    2023年4月9日
    00
  • 详解Django Meta元数据类属性解析

    在 Django 中,每个模型都包含一个名为 Meta 的内部类,该类允许我们声明有关模型的元数据。这些元数据可以用来控制模型的特定方面的行为,例如它们的排序,或者将模型转换为某个特定的格式。 下面是一些常见的 Django 元数据类属性及其含义: db_table db_table用于定义模型的数据库表名。如果没有指定,Django 使用模型类的名称和小写…

    Django 2023年3月13日
    00
  • django-跳转页面–模板-自定义过滤器

    一:跳转页面: 1,首先拿到你点赞的页面储存在cookie里面.   2,然后在登录页面登录成功后,返回存在cookie里的页面信息. if($.cookie(‘mycookie’)){ var mycookie=$.cookie(‘mycookie’); location.href=mycookie}这里先判断,首先判断是否有这个session,如果有则返…

    Django 2023年4月12日
    00
  • Django 开发环境配置过程详解

    Django 开发环境配置过程详解 这篇攻略将详细讲解如何配置 Django 开发环境,包含两个示例说明。 环境要求 Python3.x pip 包管理器 步骤 1. 创建虚拟环境 虚拟环境可避免项目中使用全局安装的包,导致包冲突的问题。 使用命令行进入要创建虚拟环境的目录 执行以下命令创建虚拟环境 python3 -m venv myvenv 其中 myv…

    Django 2023年5月16日
    00
  • 【服务后端】Django 返回的QuerySet序列化

    QuerySet序列化一般可以先写一个公共的常用的解析函数,参考前面的博文《【服务后端】Python序列化对象为Json方法》 http://www.cnblogs.com/inns/p/5507012.html 所有字段按照其类型来解析,外键返回id即可 后面介绍一些特殊序列化需求及实现   User和Class表,以及ClassUserTemp表, 1.…

    Django 2023年4月13日
    00
  • django-5.Django 管理后台

    目录 Django 管理后台 创建管理员用户 将模型添加到管理后台 通过模型层对管理界面设置 自定义ModelAdmin类对管理界面设置 创建管理员用户 python manage.py createsuperuser然后依次输入用户名,邮箱,两次密码 将模型添加到管理后台 在startapp创建的应用的目录下,找到admin.py文件,输入: # 告诉管理…

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