django 自定义用户user模型的三种方法

Django 是一款流行的 Python Web 框架,内置了用户认证系统,可以方便地使用 Django 自带的 User 模型实现用户认证 。但是有时候我们需要自定义用户模型,以满足特定的业务需求 。在 Django 中,自定义用户模型有三种方法:继承 AbstractBaseUser,继承 AbstractUser,使用自定义 User 模型 。
1. 继承 AbstractBaseUser

django 自定义用户user模型的三种方法

文章插图
AbstractBaseUser 是 Django 提供的一个抽象基类,用于自定义用户模型 。我们需要实现以下方法:
- get_full_name(): 获取用户的全名,用于显示在管理界面等位置 。
- get_short_name(): 获取用户的简短名字,用于显示在导航栏等位置 。
- has_perm(perm, obj=None): 判断用户是否具有指定的权限,obj 是可选的参数,表示要检查的对象 。
- has_module_perms(app_label): 判断用户是否具有指定应用的权限 。
此外,我们还需要定义 USERNAME_FIELD 和 REQUIRED_FIELDS 属性,分别表示用户名和必填字段 。例如:
```python
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password=None):
user = self.create_user(
email,
password=password,
)
user.is_admin = True
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
full_name = models.CharField(max_length=255, blank=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = MyUserManager()
def get_full_name(self):
return self.full_name
def get_short_name(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
```
2. 继承 AbstractUser
AbstractUser 是 Django 提供的另一个抽象基类,与 AbstractBaseUser 相比,它多了一些属性和方法,例如:
- first_name: 用户的名字 。
- last_name: 用户的姓氏 。
- email: 用户的电子邮件地址 。
- date_joined: 用户的注册时间 。
【django 自定义用户user模型的三种方法】- is_active: 用户是否激活 。
- is_staff: 用户是否是管理员 。
- is_superuser: 用户是否是超级管理员 。
我们可以继承 AbstractUser,然后添加自己的字段和方法,例如:
```python
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
bio = models.TextField(max_length=500, blank=True)
```
3. 使用自定义 User 模型
如果我们已经有了自己的 User 模型,可以将它设置为 Django 的默认 User 模型,方法是在 settings.py 文件中添加以下代码:
```python
AUTH_USER_MODEL = 'myapp.MyUser'
```
其中 myapp.MyUser 是我们自定义的 User 模型 。
使用自定义 User 模型的好处是可以轻松地扩展用户模型,添加自己的字段和方法,但是需要注意的是,一旦设置了自定义 User 模型,就不能再使用 Django 自带的 User 模型,因为 Django 中的很多功能都是基于 User 模型实现的 。
综上所述,自定义用户模型有三种方法:继承 AbstractBaseUser,继承 AbstractUser,使用自定义 User 模型 。选择哪种方法取决于具体的业务需求和开发习惯 。

推荐阅读