重写User模型
1 xfzauth\models.py
(xfzauth是app名)
# encoding:utf-8
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.db import models
class UserManager(BaseUserManager):
def _create_user(self, telephone, username, password, **kwargs):
user = self.model(telephone=telephone, username=username, **kwargs)
user.set_password(password)
user.save()
def create_user(self, telephone, username, password, **kwargs):
kwargs['is_superuser'] = False
return self._create_user(telephone, username, password, **kwargs)
def create_super(self, telephone, username, password, **kwargs):
kwargs['is_superuser'] = True
return self._create_user(telephone, username, password, **kwargs)
class User(AbstractBaseUser, PermissionsMixin):
telephone = models.CharField(max_length=11, unique=True)
username = models.CharField(max_length=100)
email = models.EmailField(unique=True)
is_active = models.BooleanField(default=True)
gender = models.IntegerField(default=0) # 0位置 1男 2女
date_join = models.DateTimeField(auto_now_add=True)
# USERNAME_FIELD :这个属性是以后在使用authenticate
# 进行验证的字段
USERNAME_FIELD = 'telephone'
# 这个属性用来,以后在命令行中使用createsuperuser命令
# 的时候,会让你输入的字段
REQUIRED_FIELDS = ['username']
# 以后给每个用户发送邮箱的时候,就会使用这个属性指定的字段值来发送
EMAIL_FIELD = 'email'
objects = UserManager()
def get_full_name(self):
return self.username
def get_short_name(self):
return self.username
2 项目的settings.py
# 安装app
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...,
'apps.xfzauth'
]
#添加AUTH_USER_MODEL
#更换成自定义的User
#AUTH_USER_MODEL,这个属性,是django内置的,他会主动到这个文件夹查找
#这个属性,如果找到了,那么就会使用这个属性指定的模型来作为User对象
#AUTH_USER_MODEL;这个属性是一个字符串,他的规则是“appname.Modelname”
#如果我们设置了AUTH_USER_MODEL,那么这个项目的makemigrations以及migrate命令
#必须要在设置完这些东西以后执行,不然会有冲突
AUTH_USER_MODEL = 'xfzauth.User'