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日

相关文章

  • python27+django数据库配置常见问题

    mysql缺乏模块,需要安装,建议去http://sourceforge.net/projects/mysql-python/files/mysql-python/下源码编译,或者安装msi文件http://www.codegood.com/archives/129 UnicodeDecodeError: ‘ascii’ codec can’t decode…

    Django 2023年4月10日
    00
  • Django框架(十八)—— drf:序列化组件(serializer)

    序列化组件 # 模型层 from django.db import models class Book(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) price = models.DecimalField(max_d…

    Django 2023年4月16日
    00
  • Django drf使用Django自带的用户系统的注册功能

    下面我将为您详细讲解Django DRF如何使用Django自带的用户系统进行注册: 1. 前置条件 在使用Django DRF进行用户注册之前,我们需要确保以下条件已经满足: 安装了Django DRF; 配置了Django自带的用户系统; 配置了Django的URL路由; 配置了Django的视图View。 2. 配置Django DRF 首先,我们需要…

    Django 2023年5月16日
    00
  • Django Rest framework FilterSet 设置 help_text

    问题描述: 在model中设置了help_text后,但并没有在drf的doc中显示 解决方法: 重载filter_for_field方法然后将help_text加到extra中 例: class UserFilter(rest_framework.FilterSet): class Meta: model = User fields = ‘__all__’…

    Django 2023年4月13日
    00
  • Django项目后台不挂断运行的方法

    下面是详细讲解“Django项目后台不挂断运行的方法”的攻略: 方法一:使用Supervisor Supervisor是一个用Python编写的进程管理工具。通过在系统中安装Supervisor,我们可以将Django项目的Web服务器后台运行并在系统崩溃或关闭时继续运行。 安装Supervisor 通过包管理器安装Supervisor,例如在Debian/…

    Django 2023年5月16日
    00
  • Django虚拟环境拷贝到另一台电脑,不能直接使用的问题

    最近折腾一个django的项目,想快速部署到服务器看看效果。virtualenv号称python三大神器之一,因此我打算把pycharm自动创建的虚拟环境直接拷贝到服务器运行代码。谁知出现了问题。   在pycharm上创建的虚拟环境是3.6.4 服务器环境上python3版本为3.6.9   按道理说,把本机的虚拟环境从本机拷贝到服务器,服务器就能直接运行…

    Django 2023年4月13日
    00
  • Django中状态保持总结[Cookie,session,的概述,特点,用法]

    状态保持 概述 浏览器请求服务器是无状态的。无状态指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。无状态的应用层面的原因是:浏览器和服务器之间的通信都遵守HTTP协议。根本原因是:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完…

    Django 2023年4月11日
    00
  • Django学习之五:Django 之 注意事项及汇总

    Django 之 注意事项及汇总 本文最后更新2018-11-23 12:15 URLS 学习Django框架,因为框架都是别人封装好的,所以使用起来确实方便;但是由于是别人咀嚼给我们吃的。。。(sorry for using this words),所以抽象程度很高,造成了易用难理解不好记,很多为什么这样做会感到费解,这是锻炼抽象理解能力的时候到了。要理解…

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