zoukankan      html  css  js  c++  java
  • 新闻详情——短信验证码处理

    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="短信验证码发送成功")  #上面的都执行成功后,返回一个成功
  • 相关阅读:
    Lumen源码分析之 一步一步带你实现Lumen容器(一)
    php 注册器模式 工厂模式
    理解 PHP 依赖注入 和 控制反转
    composer使用git作为仓储
    monolog记录日志
    Jupyter Notebook快捷键
    图像灰度化
    一道算法题:拼数字
    [转]Vue生态系统中的库
    window.postMessage实现网页间通信
  • 原文地址:https://www.cnblogs.com/Moodsfeelings/p/13784777.html
Copyright © 2011-2022 走看看