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": "发送信息成功"})
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'})
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'})
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": "发送信息成功"})
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'})
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'})
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": "消息发送成功"})