Django项目: 3.用户注册功能
Posted tmclri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django项目: 3.用户注册功能相关的知识,希望对你有一定的参考价值。
本章内容的补充知识点
导入库的良好顺序:
1.系统库 2.django库 3.自己定义的库(第三方库)
redis缓存数据库的数据调用速度快,但是不利于长时间保存。
mysql用于长时间存储,但是调用比较慢。
session会话存储的内容(以字典的方式存放)放在redis缓存里面,要设置过期时间
一、用户模型设计
1. 用户表字段分析
-
用户名
-
密码
-
手机号
-
2.用户模型设计
django的强大之处在于开发效率高,内置了权限模块之类的很多常用功能。在开始一个新的django项目时,如果权限模块中的User模型不满足项目要求,我们需要扩展或者自定义User模型。
扩展User模型有两种方法
-
如果你不需要改变数据库存储内容,只是改变行为,那么可以建立有一个基于User模型的代理模型。
-
如果想存储与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
一旦已经创立数据库表之后再去修改AUTH_USER_MODEL
,会困难很多,因为它会影响外键和多对多关系。这个改动并不能自动完成,需要手动修复(巨坑)。
根据上面的分析我们的用户模型代码如下:
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.注册功能分析
-
流程图
-
-
功能
根据流程图总结注册业务包含如下功能
-
注册页面
-
图片验证码
-
用户名检测是否注册
-
-
短信验证码
-
注册保存用户数据
因为图片验证码,短信验证码考虑到后续可能会在其他业务中用到,因此将验证码功能独立出来,创建一个新应用verification。
三、图形验证码功能实现
1.接口设计
接口说明:
类目 说明 请求方法 GET url定义
/image_code/
参数格式
查询参数 -
以上是关于Django项目: 3.用户注册功能的主要内容,如果未能解决你的问题,请参考以下文章
[oldboy-django][2深入django]Form组件功能: 数据格式验证 + 保留上次输入的值(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)