前言
Django
为我们提供了内置的User
模型,不需要我们再额外定义用户模型,建立用户体系了。它的完整的路径是在django.contrib.auth.models.User
。
User模型源码分析
class User(AbstractUser):
"""
Django 身份验证系统中的用户由该模型表示
需要用户名和密码。其他字段是可选的。
"""
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
我们可以看到User
这个类本身没干什么事情,而是继承自AbstractUser
类,那么我们查看下AbstractUser
的源码
class AbstractUser(AbstractBaseUser, PermissionsMixin):
"""
一个抽象基类实现了一个功能齐全的用户模型 符合管理员的权限。
需要用户名和密码。 其他字段是可选的。
"""
# 用户民校验
username_validator = UnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=150, blank=True)
email = models.EmailField(_('email address'), blank=True)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
# objects用户管理,里面有创建用户的方法
objects = UserManager()
EMAIL_FIELD = 'email'
# 用来描述User模型名字字段的字符串,作为唯一的标识。如果没有修改,那么会使用USERNAME来作为唯一字段。
USERNAME_FIELD = 'username'
# 一个字段名列表,用于当通过createsuperuser管理命令创建一个用户时的提示。
REQUIRED_FIELDS = ['email']
class Meta:
verbose_name = _('use