Example #1
0
def send_sms_code(mobile, sms_num, expires, temp_id):
    try:
        result = CCP().send_template_sms(mobile, [sms_num, expires], temp_id)
    except Exception as e:
        logger.error('发送验证码短信异常[mobile:%s message: %s]' % (mobile, e))
    else:
        if result == 0:
            logger.info("发送验证码短信[正常][ mobile: %s sms_code: %s]" % (mobile, sms_num))
        else:
            logger.warning("发送验证码短信[失败][ mobile: %s ]" % mobile)
Example #2
0
def send_sms_code(mobile, sms_num, expires, temp_id):
    try:
        result = CCP().send_template_sms(mobile, [sms_num, expires], temp_id)
    except Exception as e:
        logger.error('发送短信异常[mobile : %s message: %s]' % (mobile, e))
    else:
        if result == 0:
            logger.info('发送短信验证码成功[mobile : %s sms_code: %s]' %
                        (mobile, sms_num))
        else:
            logger.warning('发送短信失败 mobile: {}'.format(mobile))
Example #3
0
def send_sms_code(mobile, sms_num, expires, temp_id):
    try:
        result = CCP().send_template_sms(mobile, [sms_num, expires], temp_id)
    except Exception as e:
        logger.error('发送短信异常[mobile:%s message:%s]' % (mobile, e))
        # return to_json_data(errno=Code.SMSERROR, errmsg=error_map[Code.SMSERROR])
    else:
        if result == 0:
            logging.info('发送短信验证码成功[mobile:%s,sms_num:%s]' % (mobile, sms_num))
            # return to_json_data(errmsg='短信验证码发送成功')
        else:
            logging.info('发送短信验证码失败')
Example #4
0
    def get(self, request, mobile):
        redis = get_redis_connection("sms_codes")
        # 获取短信发送间隔
        try:
            interval = redis.get("%s_interval" % mobile)
            if interval:
                print(interval)
                return JsonResponse({'result': '-1'})
        except:
            pass

        ccp = CCP()
        sms_codes = "%04d" % random.randint(1, 9999)
        result = ccp.send_template_sms(mobile, [sms_codes, 5], 1)

        if not result:
            """发送成功"""
            redis.setex("%s_sms_codes" % mobile, 5 * 60, sms_codes)
            # 这里的值不重要,重要的是这个变量是否在redis被查找到
            redis.setex("%s_interval" % mobile, 60, 1)

        return JsonResponse({"result": result})
Example #5
0
def sms_captcha(request):
    """
    生成短信验证码
    :param request:
    :return:
    """
    telephone = request.GET.get('telephone')
    sms_code = "%06d" % random.randint(0,999999)
    print('短信验证码: %s' % sms_code)
    cache.set(telephone, sms_code, 5*60)

    print(cache.get(telephone))

    ccp = CCP()
    # result = ccp.send_template_sms(telephone, [sms_code, 5*60], 1)

    return restful.ok(message='短信验证码发送成功!')
Example #6
0
def send_sms_code(mobile, sms_num, expires, temp_id):
    """
    发送短信验证码
    :param mobile: 手机号
    :param sms_num: 验证码
    :param expires: 有效期
    :return: None
    """
    try:
        result = CCP().send_template_sms(mobile, [sms_num, expires], temp_id)

    except Exception as e:
        logger.error("发送验证码短信[异常][ mobile: %s, message: %s ]" % (mobile, e))

    else:
        if result == 0:
            logger.info("发送验证码短信[正常][ mobile: %s sms_code: %s]" %
                        (mobile, sms_num))
        else:
            logger.warning("发送验证码短信[失败][ mobile: %s ]" % mobile)
Example #7
0
    def post(self, request):
        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.PARAMERR, errmsg='参数为空,请重新输入')
        # json字符串转字典
        dict_data = json.loads(json_str.decode('utf8'))

        #2、校验参数 forms.py
        form = forms.CheckImgCodeForm(data=dict_data)
        if form.is_valid():
            # 获取手机号
            mobile = form.cleaned_data.get('mobile')
            # 3、
            # 创建短信验证码内容
            sms_num = "%06d" % random.randint(0, 999999)

            # 将短信验证码保存到数据库
            # 确保settings.py文件中有配置redis CACHE
            # Redis原生指令参考 http://redisdoc.com/index.html
            # Redis python客户端 方法参考 http://redis-py.readthedocs.io/en/latest/#indices-and-tables
            # 4、
            conn_redis = get_redis_connection(alias='verify_codes')

            # 创建一个在60s以内是否有发送短信记录的标记
            sms_flag_fmt = "sms_flag_{}".format(mobile).encode('utf8')
            # 创建保存短信验证码的标记key
            sms_text_fmt = "sms_{}".format(mobile).encode('utf8')
            pl = conn_redis.pipeline()

            # 此处设置为True会出现bug
            try:
                pl.setex(sms_flag_fmt, constants.SEND_SMS_CODE_INTERVAL, 1)
                pl.setex(sms_text_fmt, constants.SMS_CODE_REDIS_EXPIRES,
                         sms_num)
                # 让管道通知redis执行命令
                pl.execute()
            except Exception as e:
                logger.debug("redis 执行出现异常:{}".format(e))
                return to_json_data(errno=Code.UNKOWNERR,
                                    errmsg=error_map[Code.UNKOWNERR])

            logger.info("SMS code: {}".format(sms_num))

            # 发送短语验证码
            try:
                result = CCP().send_template_sms(
                    mobile, [sms_num, constants.SMS_CODE_REDIS_EXPIRES],
                    constants.SMS_CODE_TEMP_ID)
            except Exception as e:
                logger.error("发送验证码短信[异常][ mobile: %s, message: %s ]" %
                             (mobile, e))
                return to_json_data(errno=Code.SMSERROR,
                                    errmsg=error_map[Code.SMSERROR])
            else:
                if result == 0:
                    logger.info("发送验证码短信[正常][ mobile: %s sms_code: %s]" %
                                (mobile, sms_num))
                    return to_json_data(errno=Code.OK, errmsg="短信验证码发送成功")
                else:
                    logger.warning("发送验证码短信[失败][ mobile: %s ]" % mobile)
                    return to_json_data(errno=Code.SMSFAIL,
                                        errmsg=error_map[Code.SMSFAIL])
Example #8
0
    def post(self, request):
        '''

        - 发送短信
        - 保存这个短信验证码(保存在哪里?)
        - 保存发送记录
        :param request:
        :return:
        '''
        form = CheckImageForm(request.POST, request=request)
        if form.is_valid():
            # success
            # 获取手机号码
            mobile = form.cleaned_data.get('mobile')
            # 生成短信验证码
            sms_code = ''.join([
                random.choice('0123456789')
                for _ in range(constants.SMS_CODE_LENGTH)
            ])
            # 发送短信验证码,调用接口
            # ..........
            # 保存发送记录
            # logger.info('发送短信验证码[正常][mobile: %s sms_code: %s]' % (mobile,sms_code))
            ccp = CCP()
            try:
                res = ccp.send_template_sms(
                    mobile, [sms_code, constants.SMS_CODE_EXPIRES], "1")
                if res == 0:
                    logger.info('发送短信验证码[正常][mobile: %s sms_code: %s]' %
                                (mobile, sms_code))
                else:
                    logger.error('发送短信验证码[失败][moblie: %s sms_code: %s]' %
                                 (mobile, sms_code))
                    return json_response(errno=Code.SMSFAIL,
                                         errmsg=error_map[Code.SMSFAIL])
            except Exception as e:
                logger.error('发送短信验证码[异常][mobile: %s message: %s]' %
                             (mobile, e))
                return json_response(errno=Code.SMSERROR,
                                     errmsg=error_map[Code.SMSERROR])
            # 保存这个验证码 这里有个时限的问题
            # 两种方案:1、session  2、redis (不保存在MySQL是因为MySQL效率太低)
            # 但session的时限是统一设置的,这里如果重新设置时限,会把前面的session覆盖,因此排除session方案,用redis保存验证码
            # request.session['sms_code'] = sms_code
            # request.session.set_expiry
            # 60秒记录
            # 5分钟有效
            # 创建短信验证码发送记录的key
            sms_flag_key = 'sms_flag_{}'.format(mobile)
            # 创建短信验证码内容的key
            sms_text_key = 'sms_text_{}'.format(mobile)
            redis_coon = get_redis_connection(alias='verify_codes')
            # 创建一个管道
            pl = redis_coon.pipeline()
            try:
                pl.setex(sms_flag_key, constants.SMS_CODE_INTERVAL, 1)
                pl.setex(sms_text_key, constants.SMS_CODE_EXPIRES * 60,
                         sms_code)
                # 让管道通知redis执行命令
                pl.execute()
                return json_response(errmsg='短信验证码发送成功')
            except Exception as e:
                logger.error('redis 执行异常, {}'.format(e))
                return json_response(errno=Code.UNKOWNERR,
                                     errmsg=error_map[Code.UNKOWNERR])
        else:
            # fail
            # 将表单的报错信息进行拼接
            err_msg_list = []
            for item in form.errors.values():
                # item是一个列表,
                err_msg_list.append(item[0])
            err_msg_str = '/'.join(err_msg_list)
            return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)