前言
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