Flask项目详细短信验证码
代码逻辑
"""
注册,发送手机短信验证码
1.接收参数(mobile,image_code,image_code_id)
2.校验参数
判断参数是否齐全
校验手机号是否合法 用正则来校验
校验uuid是否能取出reids中存储的图片验证码的结果
校验图片验证码是否正确
3.生成短信验证码
4.讲短信验证码存储到redis
5.发短信
6.返回结果
:return:
"""
第一步
1.获取参数
mobile = request.json.get("mobile")
image_code = request.json.get("image_code")
image_code_id = request.json.get("image_code_id")
2.1校验获取到的参数
![]()
不依托字典,自动构建字典,先导入jsonify这个包 errno:错误码 errmsg:错误信息
代码如下:
if not all([mobile,image_code,image_code_id]):
return jsonify(errno=RET.PARAMERR, errmsg="缺失参数")a
2.2判断手机号是否合法
当一个列表为空的时候结果就会为假,如果要处理非法数据的话想运行代码要用if not 取反
代码如下:
mobile = mobile.stip()
if not re.findall('^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$', mobile):
return jsonify(errno=RET.PARAMERR, errmsg="手机号格式错误")
2.3 校验uuid是否能取出reids中存的图片验证码
先找到图片验证码的位置

如果加了前缀"imageCode" 后面调用的时候也要带着前缀"imageCode"不然会取不到值,然后找uuid存到了哪一个变量

代码如下:
try:
image_code_server = sr.get("imageCode:" + image_code_id)
except Exception as e:
current_app.logger.error(e) #写入日志
return jsonify(errno=RET.DBERR, errmsg="数据库查询错误") #返回jsonify的相关内容
# 如果验证码过期了或者别的原因找不到进行处理
if not image_code_server:
return jsonify(errno=RET.NODATA, errmsg="图片验证码过期")
2.4 校验图片验证码是否正确
只需要判断图片验证码 image_code_server和uuid image_code是否一致就可以了, lower会将所有的字母变成大写
if image_code_server.lower() != image_code.lower():
return jsonify(errno=RET.PARAMERR, errmsg="图片验证码错误")
3.生成短信验证码
用random随机模块进行创建随机数 用%补充随机数的位数 只能用0来补充
smsCode = "%04d" %random.randint(0,9999)
4.存储到redis
我们的手机验证码,短信验证码都用了前缀,所以这里也要加上前缀,不能用生成好的验证码作为键可以用它作为值,用mobile把手机号拼接到前面
然后ex设置验证码的有效时长
try:
sr.set("SMS:"+mobile, smsCode, ex=constants.IMAGE_CODE_REDIS_EXPIRES)
except Exception as e:
current_app.logger.error(e)
return jsonify(errno=RET.DATAERR, errmsg="短信验证码保存失败")
5.发短信
首先要用到用户传过来的手机号mobile 参数为手机号, ['验证码', 几分钟后过期], 使用哪个模板 测试的短信模板编号为1
ccp = CCP()
# # 注意: 测试的短信模板编号为1
# 参数为手机号, ['验证码', 几分钟后过期], 使用哪个模板
try:
res = ccp.send_template_sms(mobile,[smsCode,constants.IMAGE_CODE_REDIS_EXPIRES / 60],1)
except Exception as e:
current_app.logger.error(e)
return jsonify(errno=RET.THIRDERR,errmsg="短信发送失败")
# 如果res判断为-1就运行发送失败
if res == -1:
return jsonify(errno=RET.THIRDERR,errmsg="短信发送失败")
6.返回结果
return jsonify(errno=RET.OK, errmsg="短信发送成功")
redis在存储数据的时候是以二进制的方式进行存储的,但是我们要取的是字符串所以要在redis里面加入de_responses


浙公网安备 33010602011771号