用户名
电子邮件地址
密码
是否是超级用户
$ django-admin startproject
创建一个指定的应用程序,命名为"accounts"(或您喜欢的其他名称):
$ python manage.py startapp accounts
在models.py文件中,你需要创建一个新的用户模型.以下是一个示例:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
在这个示例中,我们从AbstractUser模型来继承CustomUser模型.我们添加了一个名为age的额外字段,这个字段是可选的.
修改您的settings.py文件,指定您的新自定义用户模型:
AUTH_USER_MODEL = 'accounts.CustomUser'
现在,你可以执行迁移,将自定义用户模型添加到数据库中:
$ python manage.py makemigrations
$ python manage.py migrate
现在,你已经创建了自定义用户模型,并将其添加到项目中.
在models.py中,创建一个新的自定义用户模型:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
def __str__(self):
return self.username
在这个示例中,我们继续从AbstractUser模型中继承,添加了一个可选字段age.我们还添加了一个__str__方法,用于在Django管理面板中显示用户的用户名.
修改settings.py文件,将您的新自定义用户模型指定为项目的默认用户模型:
AUTH_USER_MODEL = 'accounts.CustomUser'
此时此刻呢,您需要为您的自定义用户模型指定一个用户管理器.在您的accounts/models.py文件中,添加以下内容:
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password, **extra_fields):
"""
Creates and saves a User with the given email and password.
"""
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()
return user
def create_superuser(self, email, password, **extra_fields):
"""
Creates and saves a superuser with the given email and password.
"""
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
return self.create_user(email, password, **extra_fields)
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
objects = CustomUserManager()
def __str__(self):
return self.email
在这个示例中,我们创建了一个名为CustomUserManager的用户管理器,这个管理器继承自BaseUserManager.我们为该管理器创建了两种方法:create_user和create_superuser来创建普通用户和超级用户.
$ python manage.py makemigrations
$ python manage.py migrate
在系统中使用您的自定义用户模型与使用默认用户模型相同.你只需像以前一样导入Django的内置user模型即可:
from django.contrib.auth import get_user_model
User = get_user_model()
你可以创建一个新的自定义用户:
user = User.objects.create_user(
username='john',
email='john@example.com',
password='password'
)
或者,你可以创建一个超级用户:
admin_user = User.objects.create_superuser(
email='admin@example.com',
password='password'
)
创建accounts/models.py文件,并添加两个自定义用户模型:
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
class UserManager(BaseUserManager):
def create_user(self, email, password, **extra_fields):
"""
Creates and saves a User with the given email and password.
"""
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()
return user
def create_superuser(self, email, password=None, **extra_fields):
"""
Creates and saves a superuser with the given email and password.
"""
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_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
class Employee(User):
employee_num = models.CharField(max_length=10, unique=True)
class Meta:
verbose_name = 'employee'
verbose_name_plural = 'employees'
在这个示例中,我们创建了两个自定义用户模型:User 和 Employee. User 继承自 AbstractBaseUser, PermissionsMixin,并使用电子邮件地址作为主要字段.Employee 继承自 User.除了User模型中的字段外,Employee模型还包含一个新字段employee_num.注意Employee是如何继承User模型的.
AUTH_USER_MODEL = 'accounts.User'
$ python manage.py makemigrations
$ python manage.py migrate
你可以像使用任何Django模型那样使用这两个自定义用户模型:
from django.contrib.auth import get_user_model
User = get_user_model()
Employee = User.employee
user = User.objects.create_user(
email='john@example.com',
password='password'
)
employee = Employee.objects.create_user(
email='smith@example.com',
password='password',
employee_num='00001'
)
以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!