新闻详情——短信验证码处理

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="短信验证码发送成功")  #上面的都执行成功后,返回一个成功

 

posted on 2020-10-11 16:27  绪酱  阅读(335)  评论(0编辑  收藏  举报