在 user 的应用中的 models.py:
导入 dango 自带的用户模型
from django.contrib.auth.models import AbstractUser,UserManager as _UserManager
在主目录下的配置文件中加入:
# 自定义用户模型
AUTH_USER_MODEL = 'users.Users'
查看类的结构:
查看类的继承关系,
用户模型设计 :
from django.db import models from django.contrib.auth.models import AbstractUser, UserManager as _UserManager class UserManager(_UserManager): """ define user manager for modifing 'no need email' when 'python manager.py createsuperuser ' """ def create_superuser(self, username, password, email=None, **extra_fields): super(UserManager, self).create_superuser(username=password, password=password, email=email, **extra_fields) class Users(AbstractUser): """ add mobile、email_active fields to Django users models. """ objects = UserManager() # A list of the field names that will be prompted for # when creating a user via the createsuperuser management command. REQUIRED_FIELDS = ['mobile'] # help_text在api接口文档中会用到 # verbose_name在admin站点中会用到 mobile = models.CharField(max_length=11, unique=True, verbose_name="手机号", help_text='手机号', error_messages={'unique': "此手机号已注册"} # 指定报错的中文信息 ) email_active = models.BooleanField(default=False, verbose_name='邮箱验证状态') class Meta: db_table = "tb_users" # 指明数据库表名 verbose_name = "用户" # 在admin站点中显示的名称 verbose_name_plural = verbose_name # 显示的复数名称 def __str__(self): # 打印对象时调用 return self.username
在settings.py文件中添加如下配置:
# 自定义用户模型
AUTH_USER_MODEL = 'users.Users'
这样就为 django 指定用自己的用户模型
查看数据库:
在这个项目中,不需要邮箱地址, 而在继承了这个类后,有个邮箱 地址的字段,有手机号字段,
所以要对模型进行修改,
继承并重写 UserManager
from django.db import models from django.contrib.auth.models import AbstractUser,UserManager as _UserManager # # # Create your models here. class UserManager(_UserManager): ''' 重写 UserManager ''' def create_superuser(self, username, password, email=None, **extra_fields): super(UserManager, self).create_superuser(username=password, password=password, email=email, **extra_fields) class Users(AbstractUser): ''' 在 AbstractUser 之上添加手机号字段 ''' objects = UserManager() REQUIRED_FIELDS = ['mobile'] mobile = models.CharField(max_length=11, unique=True, verbose_name="手机号", help_text='手机号', error_messages={'unique': "此手机号已注册"} # 指定报错的中文信息 ) email_active = models.BooleanField(default=False, verbose_name='邮箱验证状态') # 内部类 class Meta: db_table = "tb_users" # 指明数据库表名 verbose_name = "用户" # 在admin站点中显示的名称 verbose_name_plural = verbose_name # 显示的复数名称 def __str__(self): # 打印对象时调用 return self.username
尝试 进行创建超级用户操作: createsuperuser
补充:
对 base.html 文件中的路径对应修改: