def get_imae_code(): """ 1. 获取传入的验证码编号,并编号是否有值 2. 生成图片验证码 3. 保存编号和其对应的图片验证码内容到redis 4. 返回验证码图片 :return: """ # current_app.logger.error("error log") # 1. 获取传入的验证码编号,并编号是否有值 args = request.args cur = args.get("cur") pre = args.get("pre") if not cur: abort(403) # 2. 生成图片验证码 _, text, image = captcha.generate_captcha() current_app.logger.debug(text) # 删除之前保存的数据 # 3. 保存编号和其对应的图片验证码内容到redis try: redis_store.delete("ImageCode_" + pre) redis_store.set("ImageCode_" + cur, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: current_app.logger.error(e) # 保存出现错误,返回JSON数据提示错误 return jsonify(errno=RET.DBERR, errmsg="保存验证码失败") # 4. 返回验证码图片 reponse = make_response(image) return reponse
def get_image_code(): ''' 1. 获取传入的验证码id 2. 生成新的验证码 3. 删除旧的验证码信息, 保存新的验证码信息 4. 返回验证码图片 :return: ''' # 获取新验证码和旧验证码ID args = request.args cur = args.get('cur') pre = args.get('pre') if not cur: abort(403) # 获取验证码图片及内容 _, text, image = captcha.generate_captcha() current_app.logger.debug(text) # 保存新验证码内容, 删除旧验证码内容 try: redis_store.set('ImageCode_' + cur, text, constants.IMAGE_CODE_REDIS_EXPIRES) redis_store.delete('ImageCode_' + pre) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='验证码保存失败') response = make_response(image) response.headers['Content-Type'] = 'image/jpg' return response
def get_image_code(): """提供图片验证码""" # 取得uuid号码 uuid = request.args.get('uuid') global last_uuid # 判定uuid是否为空 if not uuid: abort(403) # 生成图片验证码的名字,文字信息,图片 name, text, image = captcha.generate_captcha() current_app.logger.debug(text) try: if redis_store.get('ImageCode:' + last_uuid): redis_store.delete('ImageCode:' + last_uuid) redis_store.set('ImageCode:' + uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: current_app.logger.errer(e) return jsonify(error_no=RET.DBERR, error_msg=u'存储图片验证码失败') #响应图片验证码 response = make_response(image) last_uuid = uuid # 响应头的文件类型改为图片类型 response.headers['Content-Type'] = 'image/jpg' return response
def get_verify_code(): uuid = request.args.get('uuid') last_uuid = request.args.get('last_uuid') if not uuid: abort(RET.DATAERR, error_map[RET.DATAERR]) # 调用验证码工具生成验证码图片 name, text, image = captcha.generate_captcha() logging.debug(u'图片验证码: ' + text) current_app.logger.debug(u'图片验证码: ' + text) # 拼接redis数据库key verify_code_key = 'verify_code:' + uuid # 使用redis_client保存验证码文本内容 try: redis_client.set(verify_code_key, text, config.IMAGE_CODE_REDIS_EXPIRES) # 如果之前有记录通过last_uuid进行删除 if last_uuid: # 拼接redis数据库key last_verify_code_key = 'verify_code:' + last_uuid # 使用redis_client删除 redis_client.delete(last_verify_code_key, text) except Exception as e: # print e current_app.logger.error(e) return jsonify(errno=RET.DATAERR, errmsg=error_map[RET.DATAERR]) # 返回图片 response = make_response(image) response.headers['Content_Type'] = 'image/jpg' # 设定头信息 return response
def get_image_code(): uuid = request.args.get('uuid') print(uuid) last_uuid = request.args.get('last_uuid') print(last_uuid) if not uuid: abort(403) name, text, image = captcha.generate_captcha() logging.debug('图片验证码文字信息:' + text) try: if last_uuid: redis_store.delete('ImageCode:' + last_uuid) redis_store.set('ImageCode:' + uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: print e logging.error(e) # restful要求返回响应状态 return jsonify(errno=RET.DBERR, errmsg=u'保存验证码失败') # 4.返回图片验证码 resposne = make_response(image) resposne.headers['Content-Type'] = 'image/jpg' return resposne
def get_image_code(image_code_id): """ 获取图片验证码 :param image_code_id: 图片验证码编号 :return: 正常:返回验证码图片 异常:返回Json数据 """ # 1.获取参数 # 2.校验参数 # 3.业务逻辑处理 # 生成验证码图片 # 名字 真实文本 图片数据 name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编号保存到redis中,设置有效期 # redis中的数据类型: 字符串(string) 列表(list) 哈希(hash) 集合(set) 有序集合(zset) # 如: key-value(字符串), key-value(列表), key-value(哈希), key-value(集合), key-value(有序集合) # 使用哈希维护有效期的时候只能整体设置 # redis保存数据类型key-value(哈希),"image_code":{"id1":"vaule1","id2":"vaule2"} ---> 添加数据: hset("image_code", name, text) # 单条维护记录,使用字符串类型,如 "image_code_编号":"真实文本值" # redis_store.set("image_code_%s" %image_code_id, text) # 保存验证码数据到redis中 # redis_store.expire("image_code_%s" %image_code_id, constants.IMAGE_CODE_REDIS_EXPIRE) # 设置保存的验证码数据的有效期 try: redis_store.setex("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRE, text) except Exception as e: # 把捕获的异常信息写入到日志文件中 current_app.logger.error(e) # return jsonify(errno=RET.DATAERR, errmsg="save image code id failed") return jsonify(erron=RET.DATAERR, errmsg="图片验证码保存失败") # 4.返回值 # 返回图片 resp = make_response(image_data) resp.headers['Content-Type'] = "image/jpg" return resp
def get_image_code(): """ 生成图片验证码 1.获取uuid 2.生成图片验证码 3.在redis中存储图片验证码 4.返回图片验证码 :return: """ # 1.获取uuid uuid = request.args.get('cur_id') if not uuid: abort(403) # 2.生成图片验证码 name, text, data = captcha.generate_captcha() # 3.在redis中存储图片验证码 try: redis_store.set('imagecode:%s' % uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) current_app.logger.info('图片验证码:'+text) except Exception as e: # 生成日志并保存 current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='保存图片验证码失败') # 4.返回图片验证码 response = make_response(data) response.headers['Content-Type'] = 'image/jpg' return response
def get_image_code(): """提供图片验证码 1.接受请求,获取uuid 2.生成图片验证码 3.使用UUID存储图片验证码内容到redis 4.返回图片验证码 """ # 1.接受请求,获取uuid uuid = request.args.get('uuid') last_uuid = request.args.get('last_uuid') if not uuid: abort(403) # return jsonify(errno=RET.PARAMERR, errmsg=u'缺少参数') # 2.生成验证码:text是验证码的文字信息,image验证码的图片信息 name, text, image = captcha.generate_captcha() # 3.使用UUID存储图片验证码内容到redis try: if last_uuid: # 上次的uuid还存在,删除上次的uuid对应的记录 redis_store.delete('ImageCode:' + last_uuid) # 保存本次需要记录的验证码数据 redis_store.set('ImageCode:' + uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: print e return jsonify(errno=RET.DBERR, errmsg=u'保存验证码失败') # 4.返回图片验证码 resposne = make_response(image) resposne.headers['Content-Type'] = 'image/jpg' return resposne
def get_image_code(image_code_id): # 生成验证码图片 返回:名字,真实文本,图片数据 name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编号保存到redis中, 设置有效期 try: redis_store.setex("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg=error_map[RET.DBERR]) # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(): cur_id = request.args.get('cur_id') if not cur_id: abort(403) name, text, data = captcha.generate_captcha() current_app.logger.info('图片验证码'+text) try: redis_store.set('imagecode:%s' %cur_id, text, constants.IMAGE_CODE_REDIS_EXPIRES ) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR,errmsg='保存图片验证码失败') response = make_response(data) response.headers['Content-Type'] = 'image/jpg' return response
def get_image_code(): """提供图片验证码 1.获取uuid,并校验uuid 2.生成图片验证码 3.使用redis数据库缓存图片验证码,uuid作为key 4.响应图片验证码 """ # 1.获取uuid,并校验uuid uuid = request.args.get('uuid') if not uuid: abort(403) # 2.生成图片验证码 name, text, image = captcha.generate_captcha() # print text # logging.debug('验证码内容为:' + text) current_app.logger.debug('app验证码内容为:' + text) try: # 3.使用redis数据库缓存图片验证码,uuid作为key # 如果有last_uuid if last_uuid: redis_store.delete('ImageCode:%s' % last_uuid) # 过期时间300秒 redis_store.set('ImageCode:%s' % uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: logging.error(e) current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='保存验证码失败') # 记录当前的uuid,方便下次使用时作为上一次的uuid,删除上次的text global last_uuid last_uuid = uuid # 4.响应图片验证码 # 修改响应头信息,指定响应的内容是image/jpg response = make_response(image) response.headers['Content-Type'] = 'image/jpg' # 响应图片验证码 return response
def get_image_code(image_code_id): """ 获取验证码图片 :param image_code_id:图片验证码编号 :return: 正常情况下返回的是验证码图片,出现异常时返回json """ # 获取参数 # 校验参数 # 业务逻辑处理 # 生成验证码图片 # 名字 真实文本 图片数据 name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编号保存到Redis中,并设置有效期 # redis数据类型:字符串 列表 哈希 集合 有序集合 # "key":value # "image_code":{"编号1"真实文本","编号2":"真实文本"}: # hset("image_code","id1",) # 使用hash维护有效期的时候只能整体设置 # 单条维护记录选用字符串类型 # "image_code_编号1":"真实值" # "image_code_编号2":"真实值" try: # 记录名字 有效期 值 redis_store.setex(name="image_code_{}".format(image_code_id), time=constains.IMAGE_CODE_REDIS_EXPIRE, value=text) except Exception as ex: # 记录日志 current_app.logger.error(ex) # return jsonify(errno=RET.DBERR, errmsg="save image code failed") return jsonify(errno=RET.DBERR, errmsg="保存图片验证码失败") # redis_store.set("image_code_{}".format(image_code_id), text) # redis_store.exipre("image_code_{}".format(image_code_id), constains.IMAGE_CODE_REDIS_EXPIRE) # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(): """提供图片验证码""" # 1. 获取uuid,并校验uuid # 2.上传图片验证码 # 3.使用redis数据库缓存图片验证码,uuid作为key # 4.响应图片验证码 # 1. 获取uuid,并校验uuid uuid = request.args.get('uuid') if not uuid: abort(403) # 2.上传图片验证码 # 生成图片验证码的名字,文本该信息,图片 name, text, image = captcha.generate_captcha() # logging.debug('验证码内容为:' + text) # 这个输入日志会定位到哪个文件那一行,比较详细 current_app.logger.debug('app验证码内容为:' + text) # 3.使用redisreids数据库缓存图片验证码,uuid作为key try: # 如果有lst_uuid if last_uuid: redis_store.delete('ImageCode%s' % last_uuid) # 过期时间300秒 redis_store.set('ImageCode%s' % uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: # logging.error(e) current_app.logger.debug(e) return jsonify(error=RET.DBERR, errmsg='保存验证码失败') # 记录当前的uuid,方便下次使用时作为上一次的的uuid,删除上一次的text global last_uuid last_uuid = uuid # 响应图片验证码 response = make_response(image) # 设置响应头中的文件类型 response.headers['Content-Type'] = 'image/jpg' return response
def get_image_code(): """提供图片验证码""" # 1.获取uuid,并校验uuid # 2.生成图片验证码 # 3.使用redis数据库缓存图片验证码,uuid作为key # 4.响应图片验证码 # 1.获取之前的uuid和当前的uuid cur_image_uuid = request.args.get('cur') if not cur_image_uuid: abort(403) # 2.生成图片验证码 name, text, image = captcha.generate_captcha() logging.debug('验证码:%s' % text) # current_app.logger.debug('app验证码内容是:' + text) # 3.使用redis数据库缓存图片验证码,uuid作为key try: # 删除之前的验证码 if prev_image_uuid: redis_store.delete('ImageCode:%s' % prev_image_uuid) global prev_image_uuid prev_image_uuid = cur_image_uuid # 保存当前的验证码 redis_store.setex('ImageCode:%s' % cur_image_uuid, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: logging.error(e) current_app.logger.error(e) # 返回响应内容 return make_response(jsonify(errno=RET.DBERR, errmsg='保存图片验证码失败')) resp = make_response(image) # 设置内容类型 resp.headers['Content-Type'] = 'image/jpg' # 4.响应图片验证码 return resp
def get_image_code(): """提供图片验证码 1.获取uuid,并校验uuid 2.生成图片验证码 3.使用redis数据库缓存图片验证码,uuid作为key 4.响应图片验证码 """ # 1.获取uuid,并校验uuid uuid = request.args.get('uuid') if not uuid: abort(403) #2.⽣成图⽚验证码的名字,⽂本信息,图⽚ name, text, image = captcha.generate_captcha() # logging.debug('验证码:'+text) current_app.logger.debug('验证码:' + text) # 3.使用redis数据库缓存图片验证码,uuid作为key try: if last_uuid: redis_store.delete('ImageCode:%s' % last_uuid) redis_store.set('ImageCode:%s' % uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg=u'保存验证码失败') global last_uuid last_uuid = uuid # 4.响应图片验证码 response = make_response(image) # 设置响应头中的⽂件类型,指定响应的内容是image/jpg response.headers['Content-Type'] = 'image/jpg' return response
def get_image_code(): """需要注意的是,当页面生成类图片验证码,就应该把验证码的值存入redis数据库 此时需要一个唯一识别码 uuid 作为key,保存在redis数据库,加载页面的时候 加载js给验证码图片注入url,带上uuid,马上把验证码的值存入redis数据库, 当用户填写了验证码,再跟数据库的验证码对比,通过则进行下一步发送短信 """ """验证码图片src='/api/1.0/image_code?uuid=hdahdakk'""" uuid = request.args.get('uuid') """判断uuid是否有值""" print uuid if not uuid: abort(403) """利用第三方框架生成图片验证码,返回值""" name, text, image = captcha.generate_captcha() """打印日志记录错误信息""" # logging.debug(text) current_app.logger.debug(text) """使用redis存储验证码的值,uuid作为key,设置过期时间,常量不应该写在代码""" try: if last_uuid: redis_strict.delete('ImageCode:%s' % last_uuid) redis_strict.set('ImageCode:%s' % uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: """打印日志保存错误信息""" # logging.error(e) current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='保存验证码失败') """声明全局变量,保存目前的uuid""" global last_uuid last_uuid = uuid """响应验证码图片给浏览器显示""" response = make_response(image) """修改响应头的文件类型,浏览器默认是text/html,改成image/jpg才可以正常显示图片""" response.headers['Content-Type'] = 'image/jpg' return response
def get_image_code(): """ # 生成图片验证码 :return: """ # 1.获取uuid(验证码编号) cur_id = request.args.get('cur_id') # 2.生成图片验证码 name, text, data = captcha.generate_captcha() # 3.在redis中存储图片验证码 try: redis_store.set('imagecode:%s' % cur_id, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='保存图片验证码失败') # 4.返回验证码数据 response = make_response(data) # 设置相应内容的的类型 response.headers['Content-Type'] = 'image/jpg' return response
def get_image_code(): """ 图片验证码的视图函数 1. 取到图片编码 2. 生成图片验证码 3. 将图片验证码内容通过图片编码保存到redis中 4. 返回图片 :return: """ # 1. 取到图片编码 cur_id = request.args.get("cur_id") pre_id = request.args.get("pre_id") if not cur_id: abort(403) # 2. 生成图片验证码 _, text, image = captcha.generate_captcha() current_app.logger.debug("图片验证码为:" + text) # 3. 将图片验证码内容通过图片编码保存到redis中 try: redis_store.set("ImageCode:" + cur_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 jsonify(errno=RET.DBERR, errmsg="保存验证码数据失败") # 返回图片验证码的图片 response = make_response(image) # 设置响应的内容类型 response.headers["Content-Type"] = "image/jpg" # 进行返回 return response
def get_image_code(): """" 1、获取uuid,并校验uuid 2、生成图片验证码 3、使用redis数据库缓存图片验证码,uuid作为key 4、响应图片验证码 """ uuid = request.args.get('uuid') if not uuid: abort(403) #生成图片验证码 text验证码文本信息image验证码图片信息 name, text, image = captcha.generate_captcha() # current_app.logger.debug('app验证码内容为:' + text) # 3、使用redis数据库缓存图片验证码,uuid作为key try: if last_uuid: redis_store.delete('ImageCode:%s' % last_uuid) redis_store.set('ImageCode:%s' % uuid, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: # print e current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='保存验证码失败') global last_uuid last_uuid = uuid # 4.响应图片验证码 # 修改响应头信息,指定响应的内容是image/jpg response = make_response(image) response.headers['Content-Type'] = 'image/jpg' #相应是记得要转img图片格式,不然默认是html # 响应图片验证码 return response