自学django中重写User模型(笔记)
django框架自带了User模型,有时候不一定适用,需要重构,再此做个笔记,留作以后备用。
既然重构User模型,首先肯定要重写User模型代码了。
'''
#encoding: utf-8
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from shortuuidfield import ShortUUIDField
from django.db import models
# 不使用默认的自增长的主键,使用shortuuid,唯一。
# pip install django-shortuuidfield
class UserManger(BaseUserManager):
# 写此方法为了精简代码,下面创建普通用户跟超级用户都会调用此方法
def _create_user(self,telephone,username,password,**kwargs):
if not telephone:
raise ValueError('请输入手机号码!')
if not username:
raise ValueError('请输入用户名!')
if not password:
raise ValueError('请输入密码!')
# self.model 表示User
user = self.model(telephone=telephone,username=username,**kwargs)
user.set_password(password)
user.save()
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):
uid = ShortUUIDField(primary_key=True) # 设置为主键
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) # 是否是可用的
is_staff = models.BooleanField(default=False) # 是否是员工
data_joined = models.DateTimeField(auto_now_add=True) # 加入时间
USERNAME_FIELD = 'telephone' # 作为唯一认证标识, 如果不重写User模型则默认username
REQUIRED_FIELDS = ['username'] # 设置此属性会提示 username,telephone,password
EMAIL_FIELD = 'email' # 给指定用户发送邮件
objects = UserManger()
def get_full_name(self): # 必须定义。 long格式的用户标识。
return self.username
def get_short_name(self): # 必须定义。 short格式的用户标识。
return self.username
'''
如果使用mysql数据库,不使用django自带的轻量数据库,就得在settings.py中配置数据库了
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'appname',
'HOST': '127.0.0.1',
'PORT': '3306',
'USER': 'root',
'PASSWORD': 'password',
}
}
如果包含有models.py的应用没有在settings.py中的INSTALLED_APPS 添加,记得得添加
然后在settings.py中继续添加下面这行代码,覆盖默认的User模型。
AUTH_USER_MODEL = 'appname.User' # User前面的名称为User模型所在models.py的应用名称
接下来就是在虚拟环境下运行 python manage.py makemigrations ,在当前应用文件夹下有一个
migrations文件夹,里面会生成一个 0001_initial.py,保存了第一次数据迁移工作,也就是创建了User模型。
然后 运行 python manage.py migrate 此时才会在Mysql数据库中真实创建了数据表。
- django的User模型和四种扩展/重写方法
- django学习笔记009-模型_模型管理器对象(重写objects类设计自己需要的功能)
- django学习——model.py中重写user模型
- Django学习系列之重写User模型和登录验证
- Django学习笔记 — 自定义User模型
- Django学习笔记 扩展User模型
- Django 笔记 模型数据的读取
- 03_ARM汇编自学笔记模型之处理器模式
- django 拓展 User 模型
- Django(博客系统):重写了auth.User后使用createsupperuser出错解决办法
- How to Extend Django User Model 如何扩展Django用户模型
- swift自学笔记(五)(重写属性、final)
- 【django 学习笔记】04-模型
- Shader自学笔记 2.1.3 半兰伯特光照模型实现
- Django 笔记 user 注册 登录 及 权限
- Shader自学笔记 3.1.1 采样纹理加入到光照模型中
- Django学习笔记3 Django模型
- 04_ARM汇编自学笔记模型之ARM 状态下的寄存器组织
- Django重写User外键重复问题