关于用户系统:
1.使用django内置的User系统
2.需要重新定制
3.前后台使用的是同一个User系统
自定义User模型
1.创建一个app,用来管理用户系统
2.全部重写,继承自AbstractBaseUser
3.定义UserManager
4.设置AUTH_USER_MODEL
5.映射到数据库中
from django.contrib.auth.models import AbstractBaseUser,\
PermissionsMixin,BaseUserManager
from django.db import models
from shortuuidfield import ShortUUIDField
class UserManager(BaseUserManager):
# _方法 约定俗成在外面不能调用的方法
def _create_user(self,telephone,username,password,**kwargs):
if not telephone:
raise ValueError('请输入手机号码!')
if not username:
raise ValueError('请输入密码!')
if not password:
raise ValueError('请输入密码!')
user = self.model(telephone=telephone,username=username,**kwargs)
user.set_password(password)
return user
def create_user(self,telephone,username,password,**kwargs):
kwargs['is_superuser'] = False
return self._create_user(telephone,username,password,**kwargs)
def create_superuser(self,telephone,username,password,**kwargs):
kwargs['is_superuser'] = True
return self._create_user(telephone,username,password,**kwargs)
class User(AbstractBaseUser,PermissionsMixin):
# 我们不使用默认的自增长的主键 0-100容易泄露注册用户数量
# uuid/shortuuid
# 安装 pip install django-shortuuidfield
# 导入 from shortuuidfield import ShortUUIDField
uid = ShortUUIDField(primary_key=True)
telephone = models.CharField(max_length=11,unique=True)
email = models.EmailField(unique=True)
username = models.CharField(max_length=32)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
# 这个属性是设置唯一 需要验证的字段,如果不设置默认是用username
USERNAME_FIELD = 'telephone'
# 这个属性是创建超级用户时需要输入的字段,其中USERNAME_FIELD的字段和password是一定会输入的
REQUIRED_FIELDS = ['username']
# 发送邮件的
EMAIL_FIELD = 'email'
objects = UserManager()
def get_full_name(self):
return self.username
def get_short_name(self):
return self.username
一定不要忘记在settings.py里指定User模型
# 只需要APP的名字和模型的名字
AUTH_USER_MODEL = 'xfzauth.User'