Django项目: 3.用户注册功能

Posted tmclri

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django项目: 3.用户注册功能相关的知识,希望对你有一定的参考价值。

本章内容的补充知识点

导入库的良好顺序:

1.系统库 2.django库 3.自己定义的库(第三方库)

 

redis缓存数据库的数据调用速度快,但是不利于长时间保存。

mysql用于长时间存储,但是调用比较慢。

session会话存储的内容(以字典的方式存放)放在redis缓存里面,要设置过期时间

 

用户注册功能

一、用户模型设计

1. 用户表字段分析

  • 用户名

  • 密码

  • 手机号

  • 邮箱

2.用户模型设计

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

扩展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)

自定义User模型

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

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

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

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

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

官方文档

3.用户模型代码

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

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

    # A list of the field names that will be prompted for
    # when create a user via createsuperuser management command.
    REQUIRED_FIELDS = [mobile]
    # specify manager
    objects = UserManager()

在settings.py文件中添加如下配置:

# 自定义用户模型
AUTH_USER_MODEL = user.User

然后运行命令进行数据库迁移:

# 1. 相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件你可以手动打开这个文件,看看里面是什么
python manage.py makemigrations

# 2. 将该改动作用到数据库文件,比如产生table之类
python manage.py migrate

再创建一个管理用户

(tzproject) ~/code/tztz$ python manage.py createsuperuser
用户名: admin
手机号: 158xxxxxxxx
Password: 
Password (again): 
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

1.设计接口思路

  • 分析业务逻辑,明确在这个业务中需要涉及到几个相关子业务,将每个子业务党组欧一个接口来设计

  • 分析接口的功能任务,明确接口的访问方式与返回数据:

    • 接口的请求方式,如GET,POST,PUT等

    • 接口的URL路径定义

    • 需要接受的参数及参数格式(如路径参数,查询字符串,请求表单,JSON等)

    • 返回的数据及数据格式

2.注册功能分析

  1. 流程图

  2.  

    技术图片

  3. 功能

    根据流程图总结注册业务包含如下功能

    • 注册页面

    • 图片验证码

    • 用户名检测是否注册

    • 手机号检测是否注册

    • 短信验证码

    • 注册保存用户数据

    因为图片验证码,短信验证码考虑到后续可能会在其他业务中用到,因此将验证码功能独立出来,创建一个新应用verification

    三、图形验证码功能实现

    1.接口设计

    接口说明:

    类目 说明
    请求方法 GET
    url定义
    /image_code/
    参数格式
    查询参数

以上是关于Django项目: 3.用户注册功能的主要内容,如果未能解决你的问题,请参考以下文章

Django的settings文件部分源码分析

django3 商城项目 从0到1 设计与配置

django3 商城项目 从0到1 设计与配置

Django——博客项目

Django流程-以登录功能为例

[oldboy-django][2深入django]Form组件功能: 数据格式验证 + 保留上次输入的值(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)