一、用户模型设计(用户表的设计)
1. 用户表字段分析
1)用户名
2)密码
3)手机号
4)邮箱
5)邮箱是否有效
2. 用户模型设计
django设计模型开发效率极高,内置了许多功能,包括权限验证等等,也有自定义的User模型。
因此我们需要继承已经写好的抽象模型类AbstractBaseUser,它有已经封装好的各种方法,约定俗成的凡是抽象模型类起名都以Abstract来开头,但是判断该模型类是否是抽象模型类的依据是,类中需要定义
class Meta: abstract = True
这才证明它是一个抽象模型类。
在我们继承了django自带的用户模型类之后,我们使用时进行扩充字段即可。
3. 在User这个app中的models.py页面来填写我们的需要的User模型类
1)继承抽象模型类,添加用户新字段,重写管理器,方便我们创建用户,并制定我们的User模型使用我们自定义的管理器
# user/models.py 文件
from django.db import models from django.contrib.auth.models import AbstractUser, UserManager as _UserManager # Create your models here. # 自定义管理器(功能:创建用户时可以不用填写email) class UserManager(_UserManager): def create_superuser(self, username, password, email=None, **extra_fields): super().create_superuser(username=username, password=password, email=email, **extra_fields) class User(AbstractUser): """ 自定义的User模型,添加moblie,email_active字段 """ # 添加手机字段, 第一个'手机号'是数据库中备注信息,max_length是该字段的最大长度 # unique是该字段唯一,不能重复,help_text是在我们的admin后台来提示的字段信息 # error_messages是当插入字段出错时提示的报错信息 mobile = models.CharField('手机号',max_length=11, unique=True, help_text='手机号', error_messages={ 'unique':'此手机号已注册'}) # 添加一个邮箱是否激活的字段,默认值为False,及该邮箱未激活 email_active = models.BooleanField('邮箱激活状态',default=False) # 源信息,内嵌类,可以给我们的model定义元数据 class Meta: db_table = 'tb_user' # 指定数据库表名 verbose_name = '用户' # 在admin站点显示的名称 verbose_name_plural = verbose_name # 复数 # 为了方便在我们调用该类时可以看到我们创建的用户名称 def __str__(self): return self.username # 通过 createsuperuser 这个命令创建用户时,需要的字段 # 该参数里面的内容需要和我们上方唇膏就的字段名相同 REQUIRED_FIELDS = ['mobile'] # user模型相当强大,还有修改必须输出email这个行为 # 这时候就需要用到我们的管理器了object,可以查看AbstractUser这个模型类中的管理器 objects = UserManager() # UserManager这个就是管理器的内容,我们可以进行重写部分模块,来达到我们的自定义管理器的目的 # 因为我们需要创建用户时不需要必须填写email,我们创建用户时又需要用到createsuperuser这个命令 # 所以我们需要复写UserManager这个类中的create_superuser的方法,因为我们创建用户时,调用的就是这个方法 # 因为我们创建的自定义管理器不能和继承自带管理器的类同名,所以我们给继承的django的管理器起一个别名,再进行继承 # 在上方复写好了我们自定义的管理器后,需要在User模型类中指定该自定义管理器 objects = UserManager()
2)位置在apps文件夹中User应用中的models.py文件中
3) 在主目录下的settings文件中添加我们自定义模型类的地址(告诉整个项目我们的用户模型类已经修改了,并且位置在XXX)
# 注明我们的User模型的导入路径 AUTH_USER_MODEL = 'user.User' # user.User这个地址是因为我们创建的用户模型类是在user这个app下的User这个类作为用户模型类
4)在pycharm中进行远程连接我们的虚拟机
找到菜单栏中的Tools下面的start SSH session ,然后选择我们的远程主机地址连接即可。
如果出现了