十七.用户注册 ---- 图形验证码 2021-04-03

十七.用户注册 ---- 图形验证码

注:该篇文章接上一篇 十六.静态页面抽取模板

一、用户模型设计

注意事项:涉及到用户登录功能,不管是前端还是后端都要进行登录信息校验

  • 前端校验:静态化的校验,所有的校验用户可以见到
  • 后端校验:匹配所有得信息(用户名,密码,手机号, 邮箱)与数据库中的信息进行对比校验

1. 用户表字段分析

  • 用户名
  • 密码
  • 手机号
  • 邮箱(目前在我们项目没有邮箱,在项目中默认邮箱状态没有激活)
  • 图形验证码,短信验证码 (由于只是一次验证,有时间限制,所以我们用redis缓存,过期就无用了)

在这里插入图片描述

2.用户模型设计

django的强大之处在于开发效率高,内置了权限模块之类的很多常用功能。在开始一个新的django项目时,如果权限模块中的User模型不满足项目要求,我们需要扩展或者自定义User模型。

2.1 扩展User模型有两种方法
  1. 如果你不需要改变数据库存储内容,只是改变行为,那么可以建立有一个基于User模型的代理模型。
  2. 如果想存储与User模型关联的信息,可以使用OneToOneField到包含其他信息字段的模型。这种one-to-one模型经常被称作Profile模型,因为它可能存储站点用户的非身份验证的相关信息。例如:
from django.contrib.auth.models import User

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    department = models.CharField(max_length=100)
2.2 自定义User模型

如果不想使用django内置的权限系统,当然你需要自定义用户模型,这种情况不讨论。当然也不建议这么做,django内置权限系统有大的自定义功能扩展,而不是重复造轮子。

开启一个新项目,官方强烈推荐用户自定义用户模型,即是默认的用户模型目前已经足够,但是未来可能会要扩展。

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

注意: 不要忘记在settings.py中设置AUTH_USER_MODEL指向它。

一旦已经创立数据库表之后再去修改AUTH_USER_MODEL,会困难很多,因为它会影响外键和多对多关系。这个改动并不能自动完成,需要手动修复(巨坑)。
官方文档

3.用户模型代码

Django学习 — UserManager 解析
Django学习笔记——内置用户类AbstractUser与内置认证校验系统
Python中的super()用法

3.1 用户模型

根据上面的分析我们的用户模型代码如下:

from django.db import models
from django.contrib.auth.models import AbstractUser, UserManager as _UserManager


class UserManager(_UserManager):
    """
    自定义 user manager 修改在使用`python manage.py createsuperuser`命令时
    可以提供email
    """
    def create_superuser(self, username, password, email=None, **extra_fields):
        return super().create_superuser(username=username, password=password, email=email, **extra_fields)


class User(AbstractUser):
    """
    add mobile, email_active fields to Django user model.
    """
    mobile = models.CharField('手机号', max_length=11, unique=True, help_text='手机号', error_messages={
   'unique': '此手机号码已注册'})

    email_active = models.BooleanField('邮箱状态', default=False)

    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的这个行为
    # 管理器执行
    objects = UserManager()
3.2在settings.py文件中添加建立的模型

为什么在调用user模型的时候,不调用自带的user模型类,而调用我们重建的模型类呢?

  • 在调用文件时会由上而下运行setting.py文件
  • 运行到最后如果没有遇见我们自己定义的user模型声明,则调用自己自带的user模型
  • 如果遇见了我们定义的user模型,则调用我们声明的user模型

在settings.py文件中添加如下配置:
在这里插入图片描述


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值