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

yizhihongxing

下面我会详细讲解“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是一款功能强大的Python Web框架,它的模板变量是模板中最为重要和灵活的元素之一。 模板变量是一些用于在模板中呈现动态数据的Python表达式。在Django模板中,模板变量可以代表任何数据类型,例如数字、字符串、变量、对象、列表、元组和字典等。 Django模板变量的语法很简单,使用双花括号{{}}将变量包裹。当模板引擎运行时,它会将双花…

    Django 2023年3月12日
    00
  • 简单介绍Python的Django框架的dj-scaffold项目

    Python的Django框架是一个非常流行的Web开发框架,可以让开发人员快速构建高质量的Web应用程序。Django框架的dj-scaffold项目是一个用于快速创建Django应用程序的命令行工具,它可以在几分钟内创建完整的Django应用程序骨架。下面详细介绍dj-scaffold的使用过程。 安装dj-scaffold 首先需要安装dj-scaff…

    Django 2023年5月16日
    00
  • Django1.7+python 2.78+pycharm配置mysql数据库教程

    下面我将详细讲解Django1.7+Python 2.7+PyCharm配置MySQL数据库的完整攻略。 步骤一:安装MySQL及相关软件 首先,需要在本地安装MySQL数据库及相关软件,包括MySQL服务器、MySQL Workbench等。在安装过程中,需要根据个人情况设置MySQL root用户的密码等信息。 步骤二:创建Django项目并安装MySQ…

    Django 2023年5月16日
    00
  • Django ORM查询之extra查询

    extra(select=None, where=None,params=None,tables=None, order_by=None, select_params=None) 有些情况下,Django的查询语法难以简单的表达复杂的 WHERE 子句,QuerySet生成的SQL从句中注入新子句。 参数之SELECT   The select 参数可以让你…

    Django 2023年4月13日
    00
  • 对Python的Django框架中的项目进行单元测试的方法

    题目:对Python的Django框架中的项目进行单元测试的方法 1. 概述 单元测试是指对程序的每个最小单位进行测试,而在Django框架中,最小的单位是一个函数或者方法。单元测试的好处是可以确保我们写的代码是正确和可靠的。在Django中,我们可以用unittest或Jest等测试框架来进行单元测试。 2. 安装Django 首先我们需要确保已经在我们的…

    Django 2023年5月16日
    00
  • 解析Mac OS下部署Pyhton的Django框架项目的过程

    首先让我们来讲解Mac OS下部署Python的Django框架项目的完整攻略。 准备工作 首先,我们需要在我们的Mac OS系统中安装好Python和pip。在终端中输入以下命令进行检查: python –version pip –version 如果你没有安装Python和pip,可以前往Python官网进行下载和安装。 接下来,我们需要安装虚拟环境…

    Django 2023年5月16日
    00
  • Django Cache缓存系统详解

    Django是一个用于Web开发的高级Python框架,拥有强大的缓存系统,以提高Web应用程序的速度和效率,减轻服务器的负担。 缓存是将计算结果存储在一个易于访问的地方,以便后续访问可以快速获得结果,从而避免了对你的服务器资源的频繁请求,缓存的好处是提高了Web应用程序的性能,让用户能够更快地获得响应结果,减少了数据访问延迟,提高了应用程序的可用性。 Dj…

    Django 2023年3月12日
    00
  • Django中图片显示不出来

    参考: http://my.oschina.net/wenhaowu/blog/197035 http://blog.csdn.net/thy38/article/details/23553975 http://www.tuicool.com/articles/i6NVNrq http://www.cnblogs.com/wang_yb/archive/20…

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