Ejemplo n.º 1
0
    def get(self, request, mobile):
        # 1.接受参数
        image_code = request.GET.get('image_code')
        uuid = request.GET.get('uuid')
        # 2.检验参数
        if not all([image_code, uuid]):
            return JsonResponse({"code": "4002", "errmsg": "缺少必要参数"})

        redis_con = get_redis_connection('code')
        code = redis_con.get('img_%s' % uuid)
        mobile_flag = redis_con.get('send_flag_%s' % mobile)
        if mobile_flag:
            return JsonResponse({"code": "1", "errmsg": "操作太过频繁"})

        # if code is None:
        #     return JsonResponse({"code":"4001","errmsg": "验证码失效"})

        redis_con.delete('img_%s' % uuid)
        code = code.decode()
        if image_code.lower() != code.lower():
            return JsonResponse({"code": "4001", "errmsg": "验证码错误"})

        sms_code = '%06d' % random.randint(0, 999999)
        redis_con.setex('sms_%s' % mobile, 200, sms_code)
        redis_con.setex('send_flag_%s' % mobile, 200, 1)

        # CCP().send_template_sms(mobile, [sms_code, 2], 1)
        from celery_tasks.sms.tasks import sms_send
        sms_send.delay(mobile, sms_code)

        return JsonResponse({"code": 0, "errmsg": "发送信息成功"})
Ejemplo n.º 2
0
    def get(self, request, mobile):
        '''
        接收手机号,发送短信验证码
        :param mobile: 手机号
        :return: 是否成功
        '''
        # 获取redis的连接
        redis_cli = get_redis_connection('verify_code')
        # 检查60s之内是否有获取验证操作
        sms_flag = redis_cli.get('sms_flag_' + mobile)
        if sms_flag:
            raise serializers.ValidationError('请稍后再重新获取验证码')
        # 生成短信验证码
        sms_code = str(random.randint(100000, 999999))
        # 保存短信验证码与验证记录
        # 保存验证码,设置有效期为300s
        # redis_cli.setex('sms_code_'+mobile,300,sms_code)
        # # 保存发送标记,有效时间为60s
        # redis_cli.setex('sms_flag_'+mobile,60,1)

        # 使用管道,减少与redis服务器的通信次数
        redis_pl = redis_cli.pipeline()
        redis_pl.setex('sms_code_' + mobile, 300, sms_code)
        redis_pl.setex('sms_flag_' + mobile, 60, 1)
        redis_pl.execute()

        # 使用云通讯发送验证码,单位为分钟
        # CCP.sendTemplateSMS(mobile,sms_code,5,1)
        sms_send.delay(mobile, sms_code, 5, 1)

        print(sms_code)

        return Response({'message': 'OK'})
Ejemplo n.º 3
0
    def get(self, request, mobile):
        '''
            创建手机验证码
            :param request: 从请求报文中接收的数据
            :param mobile: 手机号
            :return: 是否创建成功
        '''
        # 获取redis的连接
        redis_cli = get_redis_connection('verify_code')
        # 检查是否在60s内有发送记录
        sms_flag = redis_cli.get('sms_flag_' + mobile)
        if sms_flag:
            raise serializers.ValidationError('请不要频繁获取验证码')
        # 生成短信验证码
        sms_code = str(random.randint(100000, 999999))
        # 保存短信验证码与发送记录
        # 设置带有效期的数据,单位为秒
        # 存验证码,过期 时间为300秒
        # redis_cli.setex('sms_code_' + mobile, 300, sms_code)
        # 存发送标记,过期时间为60秒
        # redis_cli.setex('sms_flag_' + mobile, 60, 1)
        # 发送短信
        # CCP.sendTemplateSMS(mobile, sms_code, 5, 1)

        # 优化redis交互,减少通信的次数,管道pipeline
        redis_pl = redis_cli.pipeline()
        redis_cli.setex('sms_code_' + mobile, 300, sms_code)
        redis_cli.setex('sms_flag_' + mobile, 60, 1)
        redis_pl.execute()
        # print(sms_code)
        sms_send.delay(mobile, sms_code, 5, 1)

        return Response({'message': 'OK'})
Ejemplo n.º 4
0
    def get(self,request,mobile):
        redis_con = get_redis_connection('code')
        mobile_flag = redis_con.get('send_flag_%s' % mobile)
        if mobile_flag:
            return JsonResponse({"code": "1", "errmsg": "操作太过频繁"})

        # if code is None:
        #     return JsonResponse({"code":"4001","errmsg": "验证码失效"})

        sms_code = '%06d' % randint(0, 999999)
        redis_con.setex('sms_%s' % mobile, 200, sms_code)
        redis_con.setex('send_flag_%s' % mobile, 200, 1)

        # CCP().send_template_sms(mobile, [sms_code, 2], 1)
        from celery_tasks.sms.tasks import sms_send
        sms_send.delay(mobile, sms_code)

        return JsonResponse({"code": 0, "errmsg": "发送信息成功"})
Ejemplo n.º 5
0
    def get(self, request, mobile):
        redis_cli = get_redis_connection('verify_code')

        sms_flag = redis_cli.get('sms_flag_' + mobile)
        if sms_flag:
            raise serializers.ValidationError("请勿重复发送")

        sms_code = str(random.randint(100000, 999999))
        redis_pl = redis_cli.pipeline()
        redis_pl.setex('sms_code_' + mobile, 300, sms_code)
        redis_pl.setex('sms_flag_' + mobile, 60, 1)
        redis_pl.execute()

        # CCP.sendTemplateSMS(mobile, sms_code, 5, 1)
        # print(sms_code)
        sms_send.delay(mobile, sms_code, 5, 1)

        return Response({'message': 'ok'})
Ejemplo n.º 6
0
    def get(self, request, mobile):
        '''
        接收手机号,发送短信验证码
        :param mobile: 手机号
        :return: 是否成功
        '''
        # 获取redis的连接
        redis_cli = get_redis_connection('verifiy_code')
        # 检查是否在60s内有发送记录
        sms_flag = redis_cli.get('sms_flag_' + mobile)  # 根据键,在redis中取值
        if sms_flag:
            raise serializers.ValidationError('请稍后在发送短信验证码')

        # 生成短信验证码
        sms_code = str(random.randint(100000, 999999))

        # 保存短信验证码与发送记录
        # 设置带有效期的数据,单位为秒
        # # 存验证码,300秒
        # redis_cli.setex('sms_code_' + mobile, 300, sms_code)
        # # 存发送标记,60秒
        # redis_cli.setex('sms_flag_' + mobile, 60, 1)

        # 优化redis交互,减少通信次数,管道pipline
        redis_pl = redis_cli.pipeline()
        redis_pl.setex('sms_code_' + mobile, 300, sms_code)
        redis_pl.setex('sms_flag_' + mobile, 60, 1)
        redis_pl.execute()

        # 发送短信
        # CCP.sendTemplateSMS(mobile,sms_code,5,1)
        # print(sms_code)

        # 调用celery任务:代理人会将这个任务添加到任务队列中
        sms_send.delay(mobile, sms_code, 5, 1)

        return Response({'message': 'OK'})
Ejemplo n.º 7
0
    def get(self, request, mobile):
        from utils.response_code import RETCODE
        image_code = request.GET.get('image_code')
        uuid = request.GET.get('uuid')
        if not all([image_code, uuid]):
            return JsonResponse({
                "code": RETCODE.IMAGECODEERR,
                "errmsg": "参数不能为空"
            })
        redis_con = get_redis_connection('code')
        i_mobile = redis_con.get("flag_%s" % mobile)
        if i_mobile:
            return JsonResponse({"code": RETCODE.OKO, "errmsg": "请勿频繁注册"})
        i_code = redis_con.get("img_%s" % uuid)
        i_code = i_code.decode()

        if i_code is None:
            return JsonResponse({
                "code": RETCODE.IMAGECODEERR,
                "errmsg": "验证码已经失效"
            })
        try:
            redis_con.delete('img_%s' % uuid)
        except Exception as e:
            logger.error(e)
        if i_code.lower() != image_code.lower():
            return JsonResponse({
                "code": RETCODE.IMAGECODEERR,
                "errmsg": "图形验证码不正确"
            })
        random_code = '%06d' % random.randint(0, 999999)
        redis_con.setex("sms_%s" % mobile, 200, random_code)
        redis_con.setex("flag_%s" % mobile, 200, 1)
        from celery_tasks.sms.tasks import sms_send
        sms_send.delay(mobile, random_code)
        # CCP().send_template_sms(mobile, [random_code, 2], 1)
        return JsonResponse({"code": RETCODE.OK, "errmsg": "消息发送成功"})