def request_sms(self, mobile):
        if not settings.SMS_ENABLED:
            log.info("当前处于调试状态,没有打开短信验证码功能, 不发送短信验证码请求...")
            return True

        captcha = str(SmsSenderUtil.get_random())
        resp = self.tx_sms_sender.send_with_param("86", mobile,
                                                  self.sms_text_temp_id,
                                                  [captcha], "", "", "")

        try:
            result = json.loads(resp)
            if result.get('result') != 0:
                log.error("发送验证码失败: mobile = {} captcha = {}".format(
                    mobile, captcha))
                log.error("返回错误为: resp = {}".format(resp))
                return False

            # 存储验证码到redis中 只保留五分钟有效
            key = RedisClient.get_captcha_redis_key(mobile)
            self.__redis.setex(key, DEFAULT_EXPIRED_CAPTCHA, captcha)

            log.info("验证码发送成功: mobile = {} captcha = {}".format(
                mobile, captcha))
            return True
        except Exception as e:
            log.error("发送验证码失败: mobile = {} captcha = {}".format(
                mobile, captcha))
            log.exception(e)

        return False
    def validate_captcha(self, mobile, captcha):
        if not settings.SMS_ENABLED:
            if captcha == settings.SMS_DEBUG_CAPTCHA:
                return True
            log.info("调试模式验证码校验失败: 发送过来的验证码 = {} 需要校验的调试验证码 = {}".format(
                captcha, settings.SMS_DEBUG_CAPTCHA))
            return False

        key = RedisClient.get_captcha_redis_key(mobile)
        value = self.__redis.get(key)
        if value is None:
            log.info("当前手机不存在验证码: {}".format(mobile))
            return False

        if captcha != value:
            log.info("当前手机验证码错误: phone = {} captcha = {} cache = {}".format(
                mobile, captcha, value))
            return False

        # 删除已经验证码完成的验证码
        self.__redis.delete(key)
        log.info("删除手机验证码redis key = {}".format(key))
        return True