使用django内置User表,继承AbstractBaseUser
本篇文章借鉴:https://blog.csdn.net/qq_29892201/article/details/108258457
环境:django 3.2 python3
使用django内置User表,有两种继承方式:
- 第一种是直接继承AbstractUser,该类提供的可使用字段多,如下
username:用户名
email: 电子邮件
password:密码
first_name:名
last_name:姓
is_active: 是否为活跃用户。默认是True
is_staff: 是否为员工。默认是False
is_superuser: 是否为管理员。默认是False
date_joined: 加入日期。系统自动生成。
- 第二种是继承AbstractBaseUser(提供最基础的用户字段)、PermissionsMixin(提供权限字段)
AbstractBaseUser
password,密码
last_login,最后登录时间
PermissionsMixin
is_super,是否是超级管理员
groups,所属用户组
user_permissions,用户权限组
继承类包导入
from django.contrib.auth.models import AbstractUser, AbstractBaseUser, PermissionsMixin
我只选了AbstractBaseUser这个类,因为对应的业务用不到组、权限这些关系,下面来看下实现
# users/models.py
class User(AbstractBaseUser):
"""
用户表
"""
state_value = [
('0', '有效'),
('1', '无效')
]
username = models.CharField(verbose_name='用户名', primary_key=True, max_length=20, unique=True)
state = models.CharField(verbose_name='状态', max_length=4, choices=state_value, default='0')
USERNAME_FIELD = 'username'
objects = MyMgr()
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return self.is_superuser
def has_module_perms(self, app_label):
return self.is_superuser
class Meta:
db_table = 'ty_user'
verbose_name = '用户'
verbose_name_plural = verbose_name
上面增加了一些字段指定行为和对象指定行为
USERNAME_FIELD = 'username'
标识该model类中用哪个字段标识用户名。这个字段指定行为是必要操作,用于django验证用户名密码以及后台登录操作
objects = MyMgr()
这是对象指定行为,主要目的是自定义在使用django-admin创建用户的时候,django的处理逻辑,MyMgr是一个管理类
"""注意:该类写法仅为参照,具体字段按照自定义字段进行分配"""
from django.contrib.auth.models import BaseUserManager
class MyMgr(BaseUserManager):
"""
重写create_user和create_superuser两个方法
"""
def create_user(self, username, password=None):
"""
Creates and saves a User with the given email, date of
birth and password.
"""
if not username:
raise ValueError('Users must have an username')
user = self.model(
username=username
)
user.set_password(password)
user.is_active = True
user.is_staff = False
user.is_superuser = True
user.save(using=self._db)
return user
def create_superuser(self, username, password=None):
"""
Creates and saves a superuser with the given email, date of
birth and password.
"""
print('---------', username, password)
user = self.create_user(
username,
password=password
)
user.save(using=self._db)
user.is_staff = False
user.is_superuser = True
user.is_active = True
return user
settings中设置
AUTH_USER_MODEL = "users.User"
迁移表
django-admin makemigrations users
django-admin migrate users
如有问题还请指正~~
标签:username,superuser,self,django,user,AbstractBaseUser,password,User From: https://www.cnblogs.com/yyx0417/p/16733983.html