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