在django默认user表基础上改为自定义user表
时间: 2024-05-03 18:22:10 浏览: 19
在Django中,可以通过继承AbstractBaseUser和BaseUserManager类来自定义用户模型。下面是具体的步骤:
1.创建一个新的app,例如accounts。
2.在accounts/models.py文件中定义自定义用户模型:
```python
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models
class UserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
if not email:
raise ValueError('The Email field must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
def get_full_name(self):
return f'{self.first_name} {self.last_name}'
def get_short_name(self):
return self.first_name
```
在上面的代码中,我们定义了一个UserManager类来管理用户。create_user方法用于创建普通用户,create_superuser方法用于创建超级用户。User类继承了AbstractBaseUser和PermissionsMixin类,并定义了必要的字段和方法。
3.在settings.py文件中指定自定义用户模型:
```python
AUTH_USER_MODEL = 'accounts.User'
```
4.运行以下命令来创建数据库表:
```python
python manage.py makemigrations accounts
python manage.py migrate
```
5.现在可以像使用默认的User模型一样使用自定义的User模型了。例如,可以使用以下代码创建新用户:
```python
from accounts.models import User
user = User.objects.create_user('user@example.com', 'password')
```
总结:
通过继承AbstractBaseUser和BaseUserManager类,可以自定义用户模型,并在settings.py文件中指定使用自定义用户模型。在使用自定义用户模型时,需要使用自定义用户模型的对象来进行用户管理操作。