新闻详情——短信验证码处理
1.实现短信验证码
因为要发送短信,使用第三方平台,我们在info下面创建一个libs文件夹来存放我们的yutongxun。
还要自己去云通讯注册账号。
云通讯中的sms里需要改一些东西,下面的代码一开始是灰色的你需要打开
这里需要把这三个改成自己的云通讯账号
@passport_blue.route("/sms_code",methods = ["POST"]) def sms_code(): """ 发送短信验证码 1接收参数 (手机号,用户填写的图片验证码,UUID) 2.校验参数 2.1校验三个参数是否正确 2.2校验手机号是否合法 2.3校验图片验证码 拿到UUID到redis中找到相对应的验证码进行对比 考虑到没有拿到的情况 将用户传过来的图片验证码和服务器中存储的进行对比 3.发送短信 3.1随机生成一个验证码 3.2发送验证码 4.将生成的手机验证码存储在redis中方便下一次使用 5.返回(消息) :return: """ # 发送短信验证码 # 1接收参数 (手机号,用户填写的图片验证码,UUID) res = request.data #二进制的json数据 res_dict = json.loads(res) #把二进制转换为字典类型的数据 mobile = res_dict.get("mobile") #因为用中括号的话找不到对应的键就会报错,所以我们用.get来获取,没接受到会报None image_code = res_dict.get("image_code") #字符串里面的内容是前端穿过来的变量,等号前面的是后端的 image_code_id = res_dict.get("image_code_id") # 2.校验参数 # 2.1校验三个参数是否正确 if not all([mobile,image_code,image_code_id]): #如果没有接受到这三个参数 return jsonify(errno=RET.PARAMERR,errmsg="缺少参数") #那么就会报一个缺少参数 # 2.2校验手机号是否合法 if not re.match("^1[3789][0-9]{9}$",mobile): #这里我们指定了第二位是3789其中的一位,如果判断手机号不合法 return jsonify(errno=RET.PARAMERR, errmsg="手机号不合法") #那么就会抱一个手机号不合法 # 2.3校验图片验证码 # 拿到UUID到redis中找到相对应的验证码进行对比 try: #在数据库操作很危险的,所以用try image_code_server = redis_store.get("image_code:"+ image_code_id) #用redis数据库连接在里面获取UUID,但是这里的UUID我们改成image_code_id except Exception as e: current_app.logger.error(e) #用日志记录错误 return jsonify(errno=RET.DBERR, errmsg="图形验证码获取失败") #报错了就返回一个图形验证码获取失败 # 考虑到没有拿到的情况 if not image_code_server: return jsonify(errno=RET.NODATA, errmsg="没有找到图形验证码") #如果没有找到,返回一个没有有找到图形验证码 # 将用户传过来的图片验证码和服务器中存储的进行对比 if image_code_server.lower() != image_code.lower(): #验证码大写,用户可以写小写怎么办,添加一个.lower(),可以大小写转换,无论写大写还是小写都让用户过了 return jsonify(errno=RET.PARAMERR, errmsg="图形验证码错误") #判断是否等于,错误返回一个图形验证码错误 # 3.发送短信 # 3.1随机生成一个验证码 sms_code = "%04d" % random.randint(0,5555) #用格式化输出来处理,双引号里面写一个%d代表数字,在d前面加04只要四位,不够用零来补,后面的%是表示后面的数据往前面填 # 3.2发送验证码 # res_sms = CCP().send_template_sms(mobile, [sms_code, 5], 1) #函数直接调用,把手机号和验证码改成我们刚刚写的,并用一个变量来接受 print(sms_code) #这里肯定是会报-1的,原因网络不行,所以这里我们直接print手机验证码 res_sms = 0 #这里直接让手机验证码等于0,成功发送出去 if not res_sms == 0: return jsonify(errno=RET.THIRDERR, errmsg="短信发送失败") #做一步判断,在libs>sms里,0代表发送成功,那么如果不等于0,返回一个短信发送失败 # 4.将生成的手机验证码存储在redis中方便下一次校验 try: redis_store.set("sms_code:"+mobile,sms_code,constants.SMS_CODE_REDIS_EXPIRES) #继续用redis来存储,这里的键用的是手机号,来找对应的手机验证码,后面设置的是时间 except Exception as e: current_app.logger.error(e) #日志记录错误 return jsonify(errno=RET.DATAERR, errmsg="短信验证码发送失败") #返回一个短信验证码发送失败 # 5.返回(消息) return jsonify(errno=RET.OK, errmsg="短信验证码发送成功") #上面的都执行成功后,返回一个成功