def sms_code(): # 获取参数 json_data = request.data dict_data = json.loads(json_data) mobile = dict_data.get('mobile') image_code = dict_data.get('image_code') image_code_id = dict_data.get('image_code_id') # 参数为空校验 if not all([mobile, image_code, image_code_id]): return jsonify(errno=RET.DATAERR, errmsg='参数不全') # 校验手机的格式 if not re.match('1[3-9]\d{9}', mobile): return jsonify(errno=RET.DATAERR, errmsg='手机号格式错误') # 通过图片验证码编号获取图片验证码 try: image_code_data = redis_store.get('image_code:%s' % image_code_id) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='数据库查询错误') # 判断验证码是否过期 if not image_code_data: return jsonify(errno=RET.DATAERR, errmsg='验证码过期') # 判断验证码是否正确 if image_code.upper() != image_code_data.upper(): return jsonify(errno=RET.DATAERR, errmsg='验证码错误') # 删除redis中的图片验证码 try: redis_store.delete('image:%s' % image_code_id) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='数据库操作错误') # 生成一个随机的验证码 sms_code = '%06d' % random.randint(0, 999999) current_app.logger.debug(str(sms_code)) # 调用ccp发送短信验证码 # ccp = CCP() # result = ccp.send_template_sms(mobile, [sms_code, 5], 1) # if result == -1: # return jsonify(errno=RET.DATAERR, errmsg='短信发送失败') # 将短信保存到redis中 try: redis_store.set('sms_code:%s' % mobile, sms_code, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='数据库操作错误') # 返回响应 return jsonify(errno=RET.OK, errmsg='发送成功')
def smscode(): """ 1.接受提交的参数 2.校验手机号码 3.根据传入的图片验证码去redis中取验证码内容 4.进行验证码比对 5.生成短信验证码内容并且发送 6.保存短信验证码到redis中 7.返回发送成功的响应 """ param_dict = request.json mobile = param_dict.get("mobile") image_code = param_dict.get("image_code") image_code_id = param_dict.get("image_code_id") if not all([mobile, image_code, image_code_id]): return jsonify(errno=RET.PARAMERR, errmsg='参数不全啊,sb!') # 校验手机号码 if not re.match('^1[3578][0-9]{9}$', mobile): return jsonify(error=RET.PARAMERR, errmsg='你输入的手机号码格式不对啊!!!') try: real_image_code = redis_store.get('ImageCode_' + image_code_id) if not real_image_code: return jsonify(errno=RET.NODATA, errmsg='验证码过期了!!') except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.NODATA, errmsg='验证码找不到数据') if image_code.lower() != real_image_code.decode().lower(): # 验证码输入错误 return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误A!!!") sms_code = "%06d" % random.randint(0, 999999) # result = CCP().send_template_sms(mobile, [sms_code, constants.SMS_CODE_REDIS_EXPIRES/60], '1') # if result != 0: # return jsonify(errno=RET.THIRDERR, errmsg='短信验证码发送失败!!!!!!') current_app.logger.debug('短信验证码是:%s' % sms_code) try: redis_store.set('SMS' + mobile, sms_code, constants.SMS_CODE_REDIS_EXPIRES) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='保存短信验证码失败了!') return jsonify(errno=RET.OK, errmsg='发送成功了!!!!!!!!!!!!!!!!')
def image_code(): print("q前段请求的url地址=" + request.url) #获取前段传递过来的一个验证码 code_id = request.args.get("code_id") # name 图片验证码的名字 # text 表示图片验证码内容 # image表示图片 #生成图片验证 name, text, image = captcha.generate_captcha() print("图片验证内容=" + text) # 第一个参数是存储才key # 第二个参数是存储的验证内容 # 第三个参数是有效期限 redis_store.set("image_id_" + code_id, text, 5000) # make_response表示响应体对象,这个对象参数表示图片 # 返回给页面的响应提是验证图片 resp = make_response(image) # 告诉系统我们当前展示的是图片 resp.headers['Content-Type'] = 'image/jpg' return resp
def get_image_code(): """ 1.获取参数 2.调用方法生成验证码及图片 3.保存到redis中 4.返回响应 """ code_id = request.args.get('code_id') pre_id = request.args.get('pre_id') name, text, image = captcha.generate_captcha() try: redis_store.set('ImageCode_' + code_id, text, constants.IMAGE_CODE_REDIS_EXPIRES) if pre_id: redis_store.delete('ImageCode:' + pre_id) except Exception as e: current_app.logger.error(e) return make_response(jsonify(errno=RET.DATAERR, errmsg='保存图片验证码失败')) response = make_response(image) response.headers['Content-Type'] = 'image/jpg' return response
def sms_code(): # 手机号 mobile = request.json.get("mobile") # 用户输入的图片验证码内容 image_code = request.json.get("image_code") # 真实图片验证码编号 image_code_id = request.json.get("image_code_id") # 检查传递过来的参数是否全部有值 if not all([mobile, image_code, image_code_id]): return jsonify(errno=RET.PARAMERR, errmsg="请输入参数") if not re.match(r"1[3456789]\d{9}", mobile): return jsonify(errno=RET.PARAMERR, errmsg="请输入正确号码") #获取到redis里面的图片验证码 real_image_code = redis_store.get("image_id_" + image_code_id) # 判断验证码是否过期,过期了就拿不到,就是空的 if not real_image_code: return jsonify(errno=RET.NODATA, errmsg="图片验证码过期了") # 如果没过期,判断用户输入的验证码,转换成小写的进行判断用lower() if image_code.lower() != real_image_code.lower(): return jsonify(errno=RET.PARAMERR, errmsg="请输入正确验证码") # 通过随机生成一个六位数的验证码,用占位符%d random_sms_code = "%06d" % random.randint(0, 999999) # 在服务器的redis里面存储短信验证码,用来给用户进行检验操作 # 第一个参数,是电话号码作为key, # 第二个参数是短信验证码 # 第三个参数是有效时间 redis_store.set("sms_code_" + mobile, random_sms_code, constants.SMS_CODE_REDIS_EXPIRES) print("短信验证码内容=" + random_sms_code) # 发送短信 statuCode = CCP().send_template_sms(mobile, [random_sms_code, 5], 1) if statuCode != 0: return jsonify(errno=RET.THIRDERR, errmsg="短信发送失败") return jsonify(errno=RET.OK, errmsg="发送短信成功")
def passport_image(): # 获取前端携带参数 cur_id = request.args.get('cur_id') pre_id = request.args.get('pre_id') # 调用captcha.generate_captcha() 获取验证码编号,验证码,验证码图片 name, text, image_data = captcha.generate_captcha() try: # 存入redis数据库 redis_store.set('image_code:%s' % cur_id, text, constants.IMAGE_CODE_REDIS_EXPIRES) # 删除上一次存入redis的验证码 redis_store.delete('image_code:%s' % pre_id) except Exception as e: current_app.logger.error(e) return '图片验证码操作失败' # 返回图片,设置一下返回图片的格式 response = make_response(image_data) response.headers['Content-Type'] = 'image/png' return response