社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

如何在Django中创建自己的自定义用户模型?

马哥Linux运维 • 3 年前 • 515 次点击  

本文将帮助大家在Django中创建自己的自定义用户模型

自定义用户模型有什么需求?

创建自己的自定义用户模型至关重要。将来,如果要对模型进行一些更改,则可以轻松进行这些更改。不然我们可能必须对模型进行一些更改,而且代码的某些部分也将被更改。在某些网站中,与用户名相比,使用电子邮件进行登录是有意义的。因此,对于程序员而言,拥有自定义用户模型是一个好习惯。

本文将帮助大家根据需要创建自己的自定义用户模型。请继续执行以下步骤。

  1. Django 安装

  2. 创建Django应用

  3. 该应用程序的自定义模型

  4. 迁移数据库

1. Django安装

设置Django之后,进入创建的环境。然后,我们可以通过以下命令创建Django项目。

django-admin startproject mysite

2.创建Django应用

如果发现某些网站使用了类似/ accounts /的URL,它们看起来就是专业代码。因此,我们还需要创建一个名为accounts的应用程序,在其中管理与该帐户有关的所有事情。因此,在当前环境中,使用以下命令创建Django应用。

python manage.py startapp accounts

创建后,该应用将包含基本文件。创建的文件如下所示。

accounts/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py

一旦创建,所有的数据库模型代码都应该写在models.py文件中。另外,不要忘记创建一个urls.py文件,该文件有助于通过帐户应用程序路由链接。创建完成后,让我们进入根据我们的需求构建自定义用户模型的下一步。

3.该应用程序的自定义模型

因此,为了创建自定义用户模型,我们需要在models.py文件中写下以下代码,因为python使用对象来管理和访问存储在数据库中的数据。下面提到了models.py文件的代码。

from django.db import models
from django.contrib.auth.models import AbstractBaseUser , BaseUserManager
import uuid


class UserManager(BaseUserManager):
    def create_user(self, email, firstname, lastname, phone,password=None):
        user = self.model(
            email = self.normalize_email(email),
            firstname = firstname,
            lastname = lastname,
            phone = phone,
        )
        user.set_password(password)
        user.save(using = self._db)
        return user

    def create_superuser(self, email,firstname,lastname,phone,password=None):
        user = self.create_user(
            email=email,
            password=password,
            firstname = firstname,
            lastname = lastname,
            phone = phone,
        )
        user.is_admin = True
        user.is_staff = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser):
    id = models.CharField(max_length=200, default=uuid.uuid4,unique=True,primary_key=True)
    email = models.EmailField(null=False, max_length=100,unique=True)
    firstname = models.CharField(null=False, max_length=100)
    lastname = models.CharField(null=False , max_length=100)
    phone = models.IntegerField(null=False,unique=True)
    date_joined = models.DateTimeField(auto_now=True)
    last_login = models.DateTimeField(auto_now=True)
    is_admin = models.BooleanField(default = False)
    is_active = models.BooleanField(default = True)
    is_staff = models.BooleanField(default = False)
    is_superuser = models.BooleanField(default = False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['firstname','lastname','phone']

    objects = UserManager()

    def __str__(self):
        return self.email + ", " + self.firstname
    
    def has_perm(self, perm, obj = None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

用户类包含表的字段或结构,我们在其中获取有关用户的一些详细信息以及其中的某些条件。为了管理User类,我们有UserManager,它将用于创建新用户或超级用户。就像我之前说的,这里的用户名字段将被替换为电子邮件。它比用户名字段更有意义。还提到了必填字段。通过使用电子邮件作为用户名字段,它会自动将电子邮件字段添加为必不可少的字段。

因此,通过UserManager,我们可以创建一个新的普通用户和一个超级用户。user.set_password()会将纯文本密码哈希为默认的哈希算法。Django将PBKDF2与SHA-256哈希一起使用,并具有密码扩展机制。user.save()函数将使用字段和哈希密码保存创建的用户。创建自定义用户模型很简单。

在这里需要注意,在创建模型之前不要迁移模型。在此之前,创建模型后,我们必须使用自定义模型更新Django设置文件,否则Django将使用其自己的预先实现的模型。只需在项目目录中的settings.py文件中使用此代码即可。

AUTH_USER_MODEL = ‘accounts.User’

设置好模型后,就该将模型迁移到数据库了。

4.迁移模型

现在,我们准备通过将更改迁移到数据库中来迁移自定义用户模型。使用以下命令在当前环境中迁移并执行该代码。

python manage.py makemigrations
python manage.py migrate

此命令将查找Django项目中的所有模型和模型中的更改。如果要专门为应用程序进行迁移,可以使用以下命令进行。

python manage.py makemigrations 
python manage.py migrate 

可以将替换为帐户,以仅在该应用程序上进行更改。

文章转载:Python运维技术
(版权归原作者所有,侵删)

点击下方“阅读原文”查看更多

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/117095
 
515 次点击