继承 BaseUserManager 和 AbstractBaseUser
或 UserManager 和 AbstractUser
在 AUTH_USER_MODEL 指定用户模型类
设置用户权限:
class MyUserManager(BaseUserManager):
def creat_user(self, username, password=None):
"""执行 python manager createuser 执行的函数"""
# do something
return user
def create_superuser(self, username, password):
"""执行 python manager createsuperuser 执行的函数"""
# do something
return user
class User(AbstractUser):
nickname = models.CharField('昵称', max_length=50)
objects = MyUserManager()
class Meta:
verbose_name = '用户'
verbose_name_plural = verbose_name
username_field = 'nickname' # 指定登录的字段名为 nickname 而不是 username
require_fields = ['nickname',] # 用户填写信息必填字段
def has_prem(self, perm, obj=None):
"""用户具体权限"""
pass
def has_module_perms(self, app_lable):
"""用户具有访问应用的权限"""
pass
def is_staff(self):
"""自定义管理员权限"""
pass
注意
改变默认用户模型,在部署初始化数据库时,一定要先执行自定义用户所在 app,不能直接 migrate
python manage.py makemgirations users
python manage.py migrate users
然后才能
python manage.py migrate
因为 auth 表依赖我们自定义 app 里定义的模型,直接 migrate 会报外键设置失败