状态码000000表示测试发送成功。 关键隐私ID 等全部隐藏。
注意一小时内,只能发送三次。 这是容联云 规定。
现在优化代码为django相关参数的传递活代码
现在再看看有没有优化空间:
这其实是类smsSDK
如果有多个用户都在 注册,那么如何让这个 类只实例化一次,就到下面的
方法去?
那么就用到
类里面两个重要方法:new 和 init
new 方法是 创建类 init 是初始化类
请求方法 GET
请求地址 /sms_codes/(?P1[3-9]\d{9})/
参数名 类型 是否必传 说明
mobile string 是 手机号
image_code string 是 图形验证码
uuid string 是 唯一编号
响应结果:JSON
字段 状态码
说明 errmsg
code 错误信息
注意, 这里我们只是凑巧命名成这样, 理论上,是要看前端 ajax 请求, 里面记不记得定义的 this.username等
注意, redis 中 用delete ,能删除任何对象,给举例看看del
对比图形验证码,注意,这里要返回的是前端的Json格式啊。
错误代码我们曾经定义过 200. 现在比如又要定义4001. 像这种可能复用的建议抽出来。定义为常数。
所以也用自己准备好的response_code.py ,直接放到utils下,因为 整个项目要用,不管app要用。
现在verifications\views 导入一下
因此,之前users\views 中的 200 状态码应该要改动了。 统一从response_code.py中找对应的。
生成6位随机数验证码
肯定用到random模块,所以在verifications\views中 import random先
保存短信验证码
发送短信验证码 响应结果
导入CCP这个类
from billshop.apps.verifications.libs.ronglianyu.ccp_sms import CCP
调用CCP 类中的send_message()方法
其中, CCP 如果不加(),就是没有实例化类,会报错
由于前端还没有写, 所以可以用postman 对现在完成的后端进行测试。
cmder 中差找redis中保存好的短信验证码,
和我手机收到的是一致的哦
到现在位置, 应该还有需要优化的功能,比如, 验证码的时效性是300秒,而且都是硬编码, 所以优化, 搞一个 提取图形验证码失效。
像这种常数量以后不可能到处去改,肯定要做常量,统一管理,
在verifications 下new一个constants.py 并优化
Vue绑定短信验证码界面
register.html
先注释原来的代码, 然后,复制 自己准备好的代码, code-refomat Code 格式一下。
现在发现,这里面的新的v-model等都没有定义,所以去register.js完善
通过前端运行, 查看源码是否被加载到了前端,来暂时验证功能一切顺利, 同时,可以在这里打断点调试,如果有问题, console里会提示
axios请求短信验证码 这是重点
分为验证码正确和不正确, 回调函数 等
需要在users的views中,添加 短信验证码信息,(图形验证码不需要,因为已经在短信验证码时,进行了验证,图形码错误, 不可能发出短信验证码)
from django_redis import get_redis_connection
去前端尝试一次完整的注册, 注意,数据库中可以删除一次,否则重复了, 不好玩。
效果完美! 可是没有存到数据库,也没有重定向到首页啊。
来,那么继续搞
找到原因, 是之前不需要时,把forms 表单的sms_code 注释了。现在释放出来。
同时,再优化一下, 判断sms_code_server 要decode 之后才严谨
@@@ ajax 目前是那些注册时,失焦后的提示和规则提示。
非常完美的注册
同时,数据库中也有了
,时区我没有改回东八区,哈哈!
存在的问题:
• 虽然我们在前端界面做了60秒倒计时功能。
• 但是恶意用户可以绕过前端界面向后端频繁请求短信验证码。
解决办法:
• 在后端也要限制用户请求短信验证码的频率。60秒内只允许一次请求短信验证码。
• 在Redis数据库中缓存一个数值,有效期设置为60秒。
分前后端:
启动执行,看看效果
既然前端已经不让你60秒内再发,为什么还要后端验证, 因为调试时, postman只走后端,所以需要后端验证