Django自带的用户认证auth模块

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager

定义UserProfile这个类的管理类

class UserManager(BaseUserManager):

use_in_migrations = True

def _create_user(self, email, password, **extra_fields):

    &#34;&#34;&#34;<br/>
    Creates and saves a User with the given email and password.<br/>
    &#34;&#34;&#34;<br/>
    if not email:<br/>
        raise ValueError(&#39;The given email must be set&#39;)<br/>
    email = self.normalize_email(email)<br/>
    user = self.model(email=email, **extra_fields)  # 创建对象<br/>
    user.set_password(password)  # 把密码加密之后再写入数据库<br/>
    user.save(using=self._db)  # 保存到数据库<br/>
    return user

def create_user(self, email, password=None, **extra_fields):

    extra_fields.setdefault(&#39;is_staff&#39;, False)  # 给字典设置默认值<br/>
    extra_fields.setdefault(&#39;is_superuser&#39;, False)<br/>
    return self._create_user(email, password, **extra_fields)

def create_superuser(self, email, password, **extra_fields):

    extra_fields.setdefault(&#39;is_staff&#39;, True)<br/>
    extra_fields.setdefault(&#39;is_superuser&#39;, True)

if extra_fields.get(‘is_staff’) is not True:

        raise ValueError(&#39;Superuser must have is_staff=True.&#39;)<br/>
    if extra_fields.get(&#39;is_superuser&#39;) is not True:<br/>
        raise ValueError(&#39;Superuser must have is_superuser=True.&#39;)<br/>
    return self._create_user(email, password, **extra_fields)

class UserProfile(AbstractBaseUser, PermissionsMixin):

email = models.EmailField(<br/>
    max_length=255,<br/>
    unique=True,<br/>
    validators=[RegexValidator(r&#39;^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$&#39;, &#39;邮箱格式不正确&#39;),]<br/>
)<br/>
is_staff = models.BooleanField(<br/>
    _(&#39;staff status&#39;),<br/>
    default=False,<br/>
    help_text=_(&#39;Designates whether the user can log into this admin site.&#39;),<br/>
)<br/>
is_active = models.BooleanField(<br/>
    _(&#39;active&#39;),<br/>
    default=True,<br/>
    help_text=_(<br/>
        &#39;Designates whether this user should be treated as active. &#39;<br/>
        &#39;Unselect this instead of deleting accounts.&#39;<br/>
    ),<br/>
)<br/>
name = models.CharField(&#39;名字&#39;, max_length=32)<br/>
department = models.ForeignKey(&#39;Department&#39;, default=None, blank=True, null=True)<br/>
mobile = models.CharField(<br/>
    &#39;手机&#39;,<br/>
    max_length=32,<br/>
    default=None,<br/>
    blank=True,<br/>
    null=True,<br/>
    validators=[RegexValidator(r&#39;^1[3-9]\d{9}$&#39;, &#39;手机格式不正确&#39;)]<br/>
)

memo = models.TextField(‘备注’, blank=True, null=True, default=None)

date_joined = models.DateTimeField(auto_now_add=True)

EMAIL_FIELD = ‘email’ # 发送邮件的字段

USERNAME_FIELD = &#39;email&#39;  # 用来唯一确定auth中的用户<br/>
REQUIRED_FIELDS = [&#39;name&#39;]  # auth指定除了上面两个配置项的字段还有哪些字段需要必填

class Meta:

    verbose_name = &#39;账户信息&#39;<br/>
    verbose_name_plural = &#34;账户信息&#34;

def clean(self):

    super(UserProfile, self).clean()<br/>
    # 对邮件进行校验<br/>
    self.email = self.__class__.objects.normalize_email(self.email)

def get_full_name(self):

    # The user is identified by their email address<br/>
    return self.name

def get_short_name(self):

    # The user is identified by their email address<br/>
    return self.email

def str(self): # unicode on Python 2

    return self.name

给ORM添加管理类

objects = UserManager()