继承 BaseUserManager 和 AbstractBaseUser

或 UserManager 和 AbstractUser

在 AUTH_USER_MODEL 指定用户模型类

设置用户权限:

  1. class MyUserManager(BaseUserManager):
  2. def creat_user(self, username, password=None):
  3. """执行 python manager createuser 执行的函数"""
  4. # do something
  5. return user
  6. def create_superuser(self, username, password):
  7. """执行 python manager createsuperuser 执行的函数"""
  8. # do something
  9. return user
  10. class User(AbstractUser):
  11. nickname = models.CharField('昵称', max_length=50)
  12. objects = MyUserManager()
  13. class Meta:
  14. verbose_name = '用户'
  15. verbose_name_plural = verbose_name
  16. username_field = 'nickname' # 指定登录的字段名为 nickname 而不是 username
  17. require_fields = ['nickname',] # 用户填写信息必填字段
  18. def has_prem(self, perm, obj=None):
  19. """用户具体权限"""
  20. pass
  21. def has_module_perms(self, app_lable):
  22. """用户具有访问应用的权限"""
  23. pass
  24. def is_staff(self):
  25. """自定义管理员权限"""
  26. pass

注意

改变默认用户模型,在部署初始化数据库时,一定要先执行自定义用户所在 app,不能直接 migrate

  1. python manage.py makemgirations users
  2. python manage.py migrate users
  3. 然后才能
  4. python manage.py migrate

因为 auth 表依赖我们自定义 app 里定义的模型,直接 migrate 会报外键设置失败