文章目录
用户模块主要是用户注册、用户登录、用户登出和修改密码。
对于用户模块来说,总体就是:
- 用户注册:判断用户字段是否符合要求,并对机器人操作进行阻拦,同时进行人工验证,都通过后保存进数据库。
- 用户登录:判断字段是否跟数据库中的一致,一致则进入到个人主页。
- 用户登出:删除该用户的登录session,并回到登录页面
- 修改密码:(待写)
用户模块总体分析
1. 数据库设计
-
管理员表UserManager
- 重写UserManager表,添加email字段
-
用户表Users
- 添加手机号
- 添加email_activte
2. 用户注册
1. 用户名字段
1. 业务流程
- 判断用户名是否为空
- 判断用户名格式是否正确
- 判断是据库中是否已存在
- 返回给前端
2. 请求、地址、参数
-
请求方式:GET
-
请求地址:/username/(?P<username>\w{6,18})/
-
请求参数:
参数名 参数类型 是否必传 描述 username 字符串 必传 用户输入的用户名
3. 前端处理
- 鼠标移出用户名输入框后执行用户名前端校验
- 校验用户名是否为空
- 校验用户名格式是否正确
4. 后端处理
- 校验用户名是否已存在
- 返回给前端
2. 密码和确认密码字段
在注册逻辑里面处理
3. 手机号字段
1. 业务流程
- 判断手机号是否为空
- 判断手机号格式是否正确
- 判断是据库中是否已存在
- 返回给前端
2. 请求、地址、参数
-
请求方式:GET
-
请求地址:/mobile/(?P<mobile>1[3-9]\d{9})/
-
请求参数:
参数名 参数类型 是否必传 描述 mobile 字符串 必传 用户输入的手机号
3. 前端处理
- 鼠标移出手机号输入框后执行手机号前端校验
- 校验手机号是否为空
- 校验手机号格式是否正确
4. 后端处理
- 校验手机号是否已存在
- 返回给前端
4. 图形验证码字段
1. 业务流程
- 携带UUID到后端
- 将图形验证码保存到redis中
- 后端返回给前端图形验证码
2. 请求、地址、参数
-
请求方式:GET
-
请求地址:/image_code/<uuid:image_code_id>/
-
请求参数:
参数名 参数类型 是否必传 描述 image_code_id uuid字符串 必传 前端JS生成
3. 前端处理
- 生成图形的uuid
- 携带uuid访问后端
4. 后端处理
- 利用插件captcha生成验证码和验证码图形
- 保存到redis数据库中
- 返回到前端
5. 短信验证码字段
1. 业务流程
- 判断手机号是否为空
- 判断手机号格式是否正确
- 判断是否有图形uuid
- 判断图形验证码是否为空
- 后端生成短信验证码
- 将短信验证码保存到redis中
- 判断短信验证码60秒内是否有重复发送
2. 请求、地址、参数
-
请求方式:POST
-
请求地址:/sms_code/
-
请求参数:
参数名 参数类型 是否必传 描述 mobile 字符串 必传 用户输入的手机号 image_text 字符串 必传 用户输入的图形验证码 image_code_id uuid字符串 必传 前端JS生成
3. 前端处理
- 校验手机号是否为空
- 校验手机号格式是否正确
- 校验图形uuid是否为空
- 校验图形验证码是否为空
- 判断图形验证码格式是否正确
- 发送ajax请求,携带参数访问后端
4. 后端处理
- form表单校验
- 校验字段是否符合要求
- 校验图形验证码跟redis数据库中的是否一直
- 校验是否60秒内有重复发送短信
- views逻辑处理
- 获取前端传来的数据
- form表单成功后获取清洗后的数据
- 生成短信验证码
- 将短信验证码、短信存放在reids中
- 使用云通讯平台发送短信
- 将结果返回到前端
6. 注册
1. 业务流程
-
用户名
- 判断用户名是否为空
- 判断用户名格式是否正确
- 判断数据库中是否存在
-
手机号
- 判断手机号是否为空
- 判断手机号格式是否正确
- 判断是据库中是否已存在
-
密码和确认密码
-
判断密码格式是否满足要求
-
判断密码和确认密码是否一致
-
-
短信验证码
- 判断短信验证码是否为空
- 判断短信验证码和reids中的是否一致
-
保存到数据库
-
跳转到登录页面
2. 请求、地址、参数
-
请求方式:POST
-
请求地址:/register/
-
请求参数:
参数名 参数类型 是否必传 描述 username 字符串 必传 用户输入的用户名 password 字符串 必传 用户输入的密码 re_password 字符串 必传 用户输入的确认密码 mobile 字符串 必传 用户输入的手机号 sms_code 字符串 必传 用户输入的短信验证码
3. 前端处理
-
用户名
- 判断用户名是否为空
- 判断用户名格式是否正确
-
手机号
- 判断手机号是否为空
- 判断手机号格式是否正确
-
密码和确认密码
-
判断密码格式是否满足要求
-
判断密码和确认密码是否一致
-
-
短信验证码
- 判断短信验证码是否为空
- 判断短信验证码格式是否正确
-
构造ajax请求参数
-
发送ajax请求到后端
4. 后端处理
-
form表单验证
- 校验字段是否符合要求
- 校验用户名格式是否正确和是否已被注册
- 校验手机号格式是否正确和是否已被注册
- 判断密码和确认密码是否一致
- 判断短信验证码和redis中的是否一致
-
views逻辑处理
- 获取前端传来的参数
- 将前端传来的数据传递给form表单进行校验
- 获取校验成功后的数据
- 判断密码和确认密码是否一致
- 将数据保存到数据库
- 跳转到登录页面
3. 用户登录
全部在提交登录里面进行校验和逻辑处理。
1. 业务流程
- 判断用户名是否为空
- 判断用户名格式是否正确
- 判断密码是否为空
- 判断密码格式是否正确
- 构造ajax请求
- 判断用户数据是否和数据库中一致
- 返回到前端
2 请求、地址、参数
-
请求方式:POST
-
请求地址:/login/
-
请求参数:
参数名 参数类型 是否必传 描述 login_name 字符串 必传 用户输入的登录名 password 字符串 必传 用户输入的密码 remember_me 布尔值 必传 用户勾选的记住密码
3.前端处理
- 校验用户名是否为空
- 校验用户名格式是否正确
- 校验密码是否为空
- 校验密码格式是否正确
- 构造ajax请求参数
- 发送ajax请求到后端
4. 后端处理
- form表单验证
- 校验字段是否满足要求
- 单独校验login_name,判断是用户名还是手机号
- 获取请求后的数据,并从mysql数据库中获取该用户的信息
- 判断是否有获取到该账号
- 判断用户名和密码是否匹配
- 判断是否有勾选记住密码
- 设置登录session信息
- 进行登录跳转
- views逻辑处理
- 获取前端传来的数据
- 将前端传来的数据和request传递给form表单进行校验
- 将数据返回给前端
4. 用户登出
直接使用django内置的logout函数来进行登出处理。
到这里用户模块的分析基本就算完成了。接下来就是具体的实现过程了。