python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证

1. 短信验证码 封装单例类 的设计模式(先进的思维,请多模仿)

状态码000000表示测试发送成功。 关键隐私ID 等全部隐藏。
注意一小时内,只能发送三次。 这是容联云 规定。

现在优化代码为django相关参数的传递活代码

现在再看看有没有优化空间:

仔细看看在这里插入图片描述

这其实是类smsSDK
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第1张图片
如果有多个用户都在 注册,那么如何让这个 类只实例化一次,就到下面的在这里插入图片描述
方法去?
那么就用到

单例(让第一个实例化, 后面所有的都用实例化之后的类属性走。)

类里面两个重要方法:new 和 init
new 方法是 创建类 init 是初始化类

优化完成,且验证啊发送成功
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第2张图片

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第3张图片

2. 短信验证码后端逻辑

请求方法 GET
请求地址 /sms_codes/(?P1[3-9]\d{9})/

参数名 类型 是否必传 说明
mobile string 是 手机号
image_code string 是 图形验证码
uuid string 是 唯一编号

响应结果:JSON
字段 状态码
说明 errmsg
code 错误信息

接口定义
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第4张图片

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第5张图片
根据业务逻辑, 写views:
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第6张图片

注意, 这里我们只是凑巧命名成这样, 理论上,是要看前端 ajax 请求, 里面记不记得定义的 this.username等

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第7张图片

注意, redis 中 用delete ,能删除任何对象,给举例看看del
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第8张图片

对比图形验证码,注意,这里要返回的是前端的Json格式啊。
错误代码我们曾经定义过 200. 现在比如又要定义4001. 像这种可能复用的建议抽出来。定义为常数。

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第9张图片
所以也用自己准备好的response_code.py ,直接放到utils下,因为 整个项目要用,不管app要用。
现在verifications\views 导入一下
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第10张图片
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第11张图片
因此,之前users\views 中的 200 状态码应该要改动了。 统一从response_code.py中找对应的。
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第12张图片

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第13张图片

生成6位随机数验证码
肯定用到random模块,所以在verifications\views中 import random先

在这里插入图片描述

保存短信验证码
在这里插入图片描述
发送短信验证码 响应结果
导入CCP这个类
from billshop.apps.verifications.libs.ronglianyu.ccp_sms import CCP
调用CCP 类中的send_message()方法

其中, CCP 如果不加(),就是没有实例化类,会报错

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第14张图片

由于前端还没有写, 所以可以用postman 对现在完成的后端进行测试。

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第15张图片

cmder 中差找redis中保存好的短信验证码,
和我手机收到的是一致的哦

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第16张图片
到现在位置, 应该还有需要优化的功能,比如, 验证码的时效性是300秒,而且都是硬编码, 所以优化, 搞一个 提取图形验证码失效。
在这里插入图片描述
像这种常数量以后不可能到处去改,肯定要做常量,统一管理,
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第17张图片
在verifications 下new一个constants.py 并优化
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第18张图片

3. 短信验证码 前端逻辑

Vue绑定短信验证码界面
register.html
先注释原来的代码, 然后,复制 自己准备好的代码, code-refomat Code 格式一下。
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第19张图片
现在发现,这里面的新的v-model等都没有定义,所以去register.js完善

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第20张图片

通过前端运行, 查看源码是否被加载到了前端,来暂时验证功能一切顺利, 同时,可以在这里打断点调试,如果有问题, console里会提示
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第21张图片

axios请求短信验证码 这是重点

整体如下图
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第22张图片

分为验证码正确和不正确, 回调函数 等

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第23张图片
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第24张图片

4. 补全注册时短信验证业务逻辑

需要在users的views中,添加 短信验证码信息,(图形验证码不需要,因为已经在短信验证码时,进行了验证,图形码错误, 不可能发出短信验证码)

from django_redis import get_redis_connection
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第25张图片
去前端尝试一次完整的注册, 注意,数据库中可以删除一次,否则重复了, 不好玩。
效果完美! 可是没有存到数据库,也没有重定向到首页啊。
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第26张图片
来,那么继续搞
找到原因, 是之前不需要时,把forms 表单的sms_code 注释了。现在释放出来。
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第27张图片
同时,再优化一下, 判断sms_code_server 要decode 之后才严谨
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第28张图片
@@@ ajax 目前是那些注册时,失焦后的提示和规则提示。

非常完美的注册

同时,数据库中也有了
,时区我没有改回东八区,哈哈!
在这里插入图片描述

5. 避免频繁发送短信验证码

存在的问题:
• 虽然我们在前端界面做了60秒倒计时功能。
• 但是恶意用户可以绕过前端界面向后端频繁请求短信验证码。
解决办法:
• 在后端也要限制用户请求短信验证码的频率。60秒内只允许一次请求短信验证码。
• 在Redis数据库中缓存一个数值,有效期设置为60秒。

避免频繁发送短信验证码逻辑分析
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第29张图片

分前后端:

避免频繁发送短信验证码逻辑实现
后端验证
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第30张图片

在这里插入图片描述

python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第31张图片
前端优化
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第32张图片

启动执行,看看效果


前端 判断
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第33张图片
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第34张图片
注意解锁
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第35张图片
python 全栈开发 Django_ billshop 商城_ 注册功能的全部实现、含前后端和所有全功能验证_第36张图片
验证一下

既然前端已经不让你60秒内再发,为什么还要后端验证, 因为调试时, postman只走后端,所以需要后端验证

你可能感兴趣的:(python,vue,django,mysql,json)