再写代码前我们应该首先有个基本思路
1、接收参数(用户填写的手机号,图形验证码以及uuid
2、校验参数
2.1三个参数是否有空值的情况
2.2校验手机号是否为正常的手机号(这里用正则来校验
2.3校验图形验证码
利用uuid中redis中获取文字版的图形验证码
将服务器中的验证码和用户填写的进行对比
3、发送手机验证码
4、将手机验证码存放到redis中
5、返回结果
以下是代码的实现
1 def sms_code(): 2 # 1.接受参数(手机号,用户填写的图形验证码,UUID) 3 res = request.data 4 res_dict =json.loads(res) 5 mobile = res_dict.get('mobile') 6 image_code = res_dict.get('image_code') 7 image_code_id = res_dict.get('image_code_id') 8 # 2.检验参数 9 # 2.1三个三叔是否有空之的情况 10 if not all([mobile,image_code,image_code_id]): 11 return jsonify(error=RET.PARAMERR,errmsg="缺失参数") 12 # 2.2检验手机号是否是正常的手机号(正则 13 if not re.match("^1[37895][0-9]{9}$",mobile): 14 return jsonify(error=RET.PARAMERR, errmsg="非法手机号") 15 # 2.3校验图形验证码 16 # 利用UUID从redis中获取文字版图形验证码 17 try: 18 image_code_server = redis_store.get("image_code:"+image_code_id) 19 except Exception as e: 20 current_app.logger.error(e) 21 return jsonify(error=RET.DATAERR, errmsg="图形验证码查询失败") 22 #如果image_code_server没有的话返回一个json数据 23 if not image_code_server: 24 return jsonify(error=RET.NODATA, errmsg="未查询到验证码bro") 25 # 将服务器存储的验证码和用户的验证码进行对比 26 if image_code_server.lower() != image_code.lower(): 27 return jsonify(error=RET.PARAMERR, errmsg="验证码输入错误") 28 # 3.发送手机验证码 29 sms_code = "%04d"% random.randint(0,9999) 30 print(sms_code) 31 # sms_res = CCP().send_template_sms(mobile,[sms_code,5],1) 32 sms_res = 0 33 if sms_res != 0: 34 return jsonify(error=RET.THIRDERR, errmsg="短信发送失败") 35 # 4.将手机验证码存放到redis中 36 try: 37 #生成uuid放进redis数据库中 38 redis_store.set('sms_code:' + mobile, sms_code, constants.SMS_CODE_REDIS_EXPIRES) 39 except Exception as e: 40 current_app.logger.error(e) 41 return jsonify(error=RET.DATAERR, errmsg="保存失败") 42 # 5.返回结果 43 return jsonify(error=RET.OK, errmsg="发送成功") 44 return jsonify()
其中返回的jsonify(error=RET.,errmsg="")中的RET我们调用的是第三方的包responsee_code.py中的类
用来判断相对应的错误类型以及返回给用户的错误信息
最后还有一点就是第28行中的发送短信我们用的是第三方平台云通讯来发送的..但是吧..这里我们方便一点就用random随机数随便生成一个了
云通讯我会单独用个博客来介绍的
接下来就是js的代码
1 function sendSMSCode() { 2 // 校验参数,保证输入框有数据填写 3 $(".get_code").removeAttr("onclick"); 4 var mobile = $("#register_mobile").val(); 5 if (!mobile) { 6 $("#register-mobile-err").html("请填写正确的手机号!"); 7 $("#register-mobile-err").show(); 8 $(".get_code").attr("onclick", "sendSMSCode();"); 9 return; 10 } 11 var imageCode = $("#imagecode").val(); 12 if (!imageCode) { 13 $("#image-code-err").html("请填写验证码!"); 14 $("#image-code-err").show(); 15 $(".get_code").attr("onclick", "sendSMSCode();"); 16 return; 17 } 18 19 // TODO 发送短信验证码 20 var params = { 21 'mobile':mobile, 22 'image_code':imageCode, 23 'image_code_id':imageCodeId 24 } 25 // TODO 发送短信验证码 26 $.ajax({ 27 url:'/passport/sms_code', // 请求地址 28 type:'post', // 请求方法 29 data:JSON.stringify(params),// 请求参数 30 contentType:'application/json',// 数据类型 31 success:function (response) { // 回调函数 32 if (response.errno == '0') { 33 // 发送短信验证码成功 34 alert(response.errmsg); 35 } else { 36 alert(response.errmsg); 37 } 38 } 39 }); 40 }