1.2手机短信验证码

再写代码前我们应该首先有个基本思路

  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 }
原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/13880356.html