def get_image_code(image_code_id): """ 获取图片验证码 :param image_code_id : 图片验证码编号 :return: 验证码图片 """ # 业务逻辑处理 # 生成验证码图片 # 名字,图片数据,图片 name, text, image_data = captcha.generate_captcha() # 将验证码真实值和编号保存到redis中 # redis_store.set("image_code%s" % image_code_id ,text) # redis_store.expire("image_code%s" % image_code_id ,constants.IMAGE_CODE_REDIS_TIME)(记录名,有效时间) try: # 将数据图片验证数值和编号存储到reids中,并设置了有效时间 redis_store.setex("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_TIME, text) except Exception as e: # 日志记录 current_app.logger.error(e) # 返回json数据错误信息 return jsonify(errno=RET.DBERR, errmsg="save image code id failed") # 返回图片 resp = make_response(image_data) resp.headers['Content-Type'] = "image/jpg" return resp
def get_image_code(image_code_id): ''' 获取图片验证码 :return:验证码图片 ''' print('生成图片验证码') # 生成图片验证码的name, text, image_data(二进制数据) name, text, image_data = captcha.generate_captcha() print(type(text)) # 设置redis和有效期 # redis_store.set('image_code_%s' % image_code_id, text) # redis_store.expire('image_code_%s' % image_code_id, constants.AREA_INFO_REDIS_EXPIRES) # 把上面两步用一步完成 记录名字 记录有效期 记录值 try: redis_conn.setex('image_code_%s' % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 记录日志 current_app.logger.error(e) # return jsonify(re_code=RET.DBERR, errmsg='save image code id failed') return jsonify(re_code=RET.DBERR, errmsg='保存图片id失败') # 业务处理 # 生成验证码图片 # 将验证码真实值和编号保存在redis中 # 返回值 response = make_response(image_data) 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_store.set("image_code_%s" % image_code_id, text) # redis_store.expire("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) # 记录名字 有效期 记录值 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="保存图片验证码信息失败") # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(image_code_id): """ 获取图片验证码 :param image_code_id: 图片验证码编码 :return: 正常:验证码图片 异常:返回json数据 """ # 生成验证码图片 # 名字 真实文本 图片数据 name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编号保存到redis中,设置有效期 # 使用这个setex可以直接将数据和有效期一起存储 # 记录名字 过期时间 记录值 try: redis_store.setex('image_code_%s' % image_code_id, IAMGE_CODE_ID_TIME, text) except Exception as e: # 返回错误信息,对应的状态信息 return jsonify(errno=RET.DBERR, errmsg='保存验证码图片失败') # 返回图片,设置Content-Type,表示为一个图片 resp = make_response(image_data) resp.headers['Content-Type'] = 'image/jsp' return resp
def get_image_code(image_code_id): """提供图片验证码""" # 业务处理 # 生成验证码图片 # 验证码名字, 真实值, 二进制数据 name, text, image_data = captcha.generate_captcha() try: # 保存验证码的真实值与编号 # redis_store.set("image_code_%s" % image_code_id, text) # redis_store.expires("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) redis_store.setex("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 在日志中记录异常 current_app.logger.error(e) resp = { "error_code": RET.DBERR, "errmsg": "保存验证码失败" } return jsonify(resp) # 返回验证码图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(image_code_id): """ 获取图片验证码 :params: image_code_id验证码编号 :return :正常:验证码图片 异常:返回json """ # 获取参数 # 验证参数 # 业务逻辑处理(1.生成验证码图片,2.将验证码真实值编号保存到redis,) # 1.生成验证码图片 name, text, image_data = captcha.generate_captcha() #2.将验证码真实值编号保存到redis # 单条维护记录使用redis的string类型 # redis_store.set("image_code_%s" % image_code_id,text ) # # 设置有效期 # redis_store.expire("image_code_%s" % image_code_id,IMAGE_CODE_REDIS_EXPIRES) # setex(name, time, value)设置可以对应的值为string类型的value,并指定此键值对应的有效期 try: redis_store.setex("image_code_%s" % image_code_id, IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 记录日志 current_app.logger.error(e) return jsonify(code=RET.DBERR, errmsg="保存图片验证码失败") # 返回值 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(image_code_id): """ 获取图片验证码 :params image_code_id: 图片验证码编号 :return: """ #业务逻辑处理 #生成验证码图片 #将验证码真实值与编号保存到redis中 #返回图片 #名字 真实文本 图片数据 name, text, image_data = captcha.generate_captcha() # redis_store.set("image_code_%s" % image_code_id, text) # redis_store.expire("image_code_%s" %image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) #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(error=RET.DBERR, errmsg="save image code failed.") resp = make_response(image_data) resp.headers["Content-Type"] = 'image/jpg' return resp
def get_image_code(image_code_id): """ 获取图片验证码 :params image_code_id: 图片验证码 :return: 验证码图片 """ # 业务逻辑处理 # 生成验证码图片 name, text, image_data = captcha.generate_captcha() try: # 将验证码真实值与编号保存到redis中,设置有效期 redis_store.setex(f"image_code_{image_code_id}", constants.IMAGE_CODE_REDIS_EXPIRES, text) print("image_code_id", image_code_id) print("text", text) except Exception as e: # 记录日志 current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="保存图片验证码失败") # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(): """ 获取图片验证码 1.接收请求,获取UUID和上一个uuid 2.判断数据库保存的uuid是否等于last_uuid等于删除, 3.生成图片验证码 4.保存新的uuid,对应的图片文本信息 :return: josnify 验证码图片 """ # 1.接收请求,获取UUID,last_uuid uuid=request.args.get('uuid') last_uuid=request.args.get('last_uuid') if not uuid: #缺省参数报403异常 abort(403) # 2.生成图片验证码 名字,文字信息,图片信息 name, text, image = captcha.generate_captcha() current_app.logger.debug('图片验证码信息:'+text) # 4.删除上次生成的验证码图片 try: if last_uuid: redis_conn.delete('ImageCode:'+last_uuid) # 3.保存UUID对应的验证码文字信息,设置时长 redis_conn.set('ImageCode:' + uuid, text,constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: current_app.logger.debug(e) return jsonify(re_code=RET.DBERR,msg='保存图片验证码失败') 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中,使用set集合 image_code_id_number = 'image_code_%s' % image_code_id # redis_store.set(image_code_id_number, text) # redis_store.expire(image_code_id_number, constants.IMAGE_CODE_REDIS_EXPIRE) # 以上两行代码可以整合成以下一行,setex方法中既可以设置对应的键值对,还可以设置有效期 try: # 记录名字 有效期 记录值 redis_store.setex(image_code_id_number, constants.IMAGE_CODE_REDIS_EXPIRE, text) except Exception as e: # 记录日志 current_app.logger.error(e) # return jsonify(errorno=RET.DBERR, errmsg='save image code id failed') return jsonify(errorno=RET.DBERR, errmsg='保存图片验证码失败') # 返回图片 resp = make_response(image_data) resp.headers['Content-Type'] = 'image/jpg' return resp
def get_image_code(image_code_id): """获取图片验证码 : params image_code_id: 图片验证码编号 :return :验证码图片 """ # 业务逻辑处理 # 生成验证码图片 # 名字,真实文本,图片数据 name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编导保存到redis中,设置有效期 # redis的数据类型: 字符串 列表 哈希 set(集合) # 使用哈希维护有效期的时候只能整体设置 # "image_codes": {"id1":"abc","id2":"123"} hset{"image_codes","id1","abc"}#设置值 hget("id1")#取值 # 单条维护记录,选用字符串 # "image_code_id1":"真实值" # redis_store.set("image_code_%s" % image_code_id, text) # redis_store.expire("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) 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="保存图片验证码失败") return jsonify(errno=RET.DBERR, errmsg="save image code id failed") # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(): """ 产生图片验证码 1、接收参数(图片验证码标识)并进行校验 2、生成图片验证码 3、在redis中保存图片验证码 4、返回验证码图片 """ # 1、接收参数(图片验证码标识)并进行校验 image_code_id = request.args.get("cur_id") if not image_code_id: return jsonify(errno=RET.PARAMERR, errmsg="缺少参数") # 2、生成图片验证码 # 文件名称 验证码文本 验证码图片内容 name, text, content = captcha.generate_captcha() current_app.logger.info("图片验证码是:%s" % text) # 3、在redis中保存图片验证码 # redis_store.set("key", "value", "expires") try: redis_store.set("imagecode:%s" % image_code_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(content) # 指定返回内容的类型 response.headers["Content-Type"] = "image/jpg" return response
def get_image_code(image_code_id): """提供图片验证码""" # 获取参数 # 校验参数 # 业务处理 # 生成验证码图片 # 名字,真实值,图片二进制 name, text, image_data = captcha.generate_captcha() # 保存验证码的真实值与编号 # 考虑到验证码保存不需要长期留存,还要维护验证码的有效期,故使用redis保存 # 数据结构应该是哈希或者字符串 # 因为每个验证码的有效期都不同,所以使用字符串 # redis_store.set("image_code_%s" % image_code_di, text) # redis_store.expires("image_code_%s" % image_code_di, constants.IMAGE_CODE_REDIS_EXPIRES) 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) resp = { "errno": RET.DBERR, # 在实际开发中,一定要使用英文 "errmsg": "保存验证码失败" } return jsonify(resp) # 返回验证码图片,需带上响应头,否则浏览器不识别 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(): """ 1. 取到图片编码 2. 生成图片验证码 3. 存储到redis中(key是图片编码,值是验证码的文字内容) 4. 返回图片 """ # 1. 取到图片编码 args = request.args cur = args.get("cur") pre = args.get("pre") # 如果用户没有传图片id的话,直接抛错 if not cur: abort(403) # 2. 生成图片验证码 _, text, image = captcha.generate_captcha() # 为了测试输入到控制台中 current_app.logger.debug(text) # 3. 存储到redis中(key是图片编码,值是验证码的文字内容) try: if pre: 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) return jsonify(errno=RET.DBERR, errmsg="保存图片验证码失败") # 4. 返回验证码图片 respnose = make_response(image) # 设置contentType respnose.headers["Content-type"] = "image/jpg" return respnose
def get_image_code(image_code_id): """ 获取图片验证码 :params image_code_id 图片验证码编号 :return 正常:验证码图片 异常:返回json """ # 生成验证码图片 # 名字,真实文本,图片数据 name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编号保存到redis中,设置有效期 # 使用哈希维护有效期时只能整体设置,所以单条维护记录,选择字符串 # redis_store.set("image_code_%s" % image_code_id, text) # redis_store.expire("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) 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="保存验证码图片信息失败") # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_img_code(img_code_id): """ 获取图片验证码 :param img_code_id: :return: """ # 业务逻辑如下: # 生成验证码图片 # 将验证码真实文本与编号保存到redis中,并设置有效期 # 返回图片数据 # 名字 真实文本 图片数据 name, text, img_data = captcha.generate_captcha() # 保存到redis try: redis_store.setex("img_code_%s" % img_code_id, IMG_CODE_REDIS_EXPIRES, text) except Exception as e: current_app.logger.error(e) return jsonify(erron=RET.DBERR, errmsg="redis save image code failed") # 需要考虑请求头默认是text/html,传图片则要改成image/jpg resp = make_response(img_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(image_code_id): """ 获取图片验证码 : params image_code_id: 图片验证码编号 :return: 正常:验证码图片 异常:返回json数据 """ # 提取参数 # 检验参数 ,不穿根本就进不来,所以不需要判断了 # 业务逻辑处理 # 生成验证码图片 name, text, image_data = captcha.generate_captcha() # 名字,真实文本,图片数据 # text, image_data = captcha2.veri_code() # 将验证码真实值与编号保存到redis中 # redis: 字符串 列表 哈希 set sortset # "key" :xxx # 使用哈希维护有效期的时候,只能整体操作 # 使用单条维护记录,选用字符串 # "image_code_编号1":"真实值" # 记录名 有效期 值 try: # 链接redis数据库,链接超时出现异常 redis_store.setex("image_code_%s" % image_code_id, constants.IMAGE_CODE_EXPIRES, text) # 有效期 except Exception as e: # 记录日志 current_app.logger.error(e) # 不需要记录访问的路径试图,这里的e就是message的值。自己去看看代码理解一下 # return jsonify(errno=RET.DBERR, errmsg="save image code id failed") return jsonify(errno=RET.DBERR, errmsg="保存图片验证码信息失败") # 返回应答,可以是字符串,或者是图片,但是默认的Content-Type:text/html不是图片的头 resp = make_response(image_data) resp.headers['Content-Type'] = 'image/jpg' return resp
def get_image_code(image_code_id): """ 获取图片验证码 :return: 正常情况:验证码图片 异常:返回json """ # 业务逻辑处理 # 生成验证码图片 name, text, image_data = captcha.generate_captcha() # 将验证码图片真实值和编号保存在redis中, 设置有效期 # redis: string list hash set # "key": xxx # 使用hash操作,只能整体操作,不符合要求 # image_codes: {"":"", "":"", "":"",} hash数据类型 hset("image_codes", "id1", "abc") # 单条维护记录 # 使用set和expire方法进行组合使用,配置存储及过去时间 # redis_store.set("image_code_%s" % image_code_id, text) # # 设置有效期 # redis_store.expire("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) # 直接使用setex方法对文本和有效期进行设置 # redis_store.setex(mage_code_id, 有效期, text) try: redis_store.setex("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: current_app.logger.error("redis存储图像识别码错误:%s" % e) return jsonify(errno=RET.DATAERR, errmsg="save image code id failed") # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" # print("resp:", resp, type(resp)) return resp
def get_image_code(): """ 获取图片验证码 :param image_code_id: 图片验证码编号 :return: 正常:验证码图片 异常:返回json """ # 获取参数 # 检验参数 # 业务逻辑处理,生成验证码操作 # 名字 真实文本 图片数据 image_code_id = request.args.get("image_code_id") name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编号存到redis中 # 单条维护记录,选用字符串 # image_codes_编号1: "真实值" # image_codes_编号2: "真实值" # redis_store.set("image_code_%s" % image_code_id, text) # redis_store.expire("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) 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="保存图片验证码信息失败") # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def generate_image_code(image_code_id): """ 生成图片验证码: 1/调用captcha扩展包,生成图片验证码,name,text,image 2/保存图片验证码的内容,使用redis数据库 3/返回前端图片 4/需要设置响应的类型 :param image_code_id: :return: """ # 调用扩展生成图片验证码 name, text, image = captcha.generate_captcha() # with open('1.jpg', 'a') as obj: # obj.write(image) try: # 保存图片验证码到redis数据库,保存格式为:imagecode_image_code_id, 设置有效期 redis_store.setex('imagecode_' + image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: current_app.logger.error(e) return jsonify(errcode=RET.DBERR, errmsg='保存图片验证码失败') else: response = make_response(image) response.headers['Content-Type'] = 'image/jpg' # 返回结果 return response
def get_image_code(image_code_id): """ 获取图片验证码 :params image_code_id: 图片验证码编号 :return: 正常情况下返回验证码图片, 异常返回json """ # 生成图片验证码 # 名字 真是文本,图片数据 name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编号保存到redis中, 设置有效期 # redis: 字符串 列表 哈希 set # 使用哈希维护有效期的时候只能整体设置 # 单条维护记录使用字符串 # "image_code_编号1": "真实值" # "image_code_编号2": "真实值" # redis保存数据 # redis_store.set("image_code_%s" % image_code_id, text) # 设置有效期 # redis_store.expire("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) # 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="save image code id failed!") # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(image_code_id): """提供图片验证码""" # 业务处理 # 生成验证码图片 名字 验证码真实值 图片二进制内容 name, text, image_data = captcha.generate_captcha() try: # 保存验证码的真实值和编号 # redis_store.set("image_code_%s"%image_code_id,text) # 保存验证码的有效期 # redis_store.expires("image_code_%s"%image_code_id,constants.IMAGE_CODE_REDIS_EXPIRES) # 保存验证码真实值和编号,有效期 setex() redis_store.setex("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 出现异常则在日志中记录异常 current_app.logger.error(e) resp = { "errno": RET.DBERR, "errmsg": "保存验证码失败" # "errmsg":"Failed to save the verification code" } return jsonify(resp) # 返回验证码图片 # 返回的Content-Type 为 image/jpg resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(image_code_id): """提供图片验证码""" # 提取参数 image_code_id(不用提取用和校验) # 生成验证码图片 # 名字,真实验证码 验证码图片数据 name, text, image_data = captcha.generate_captcha() # 保存验证码的真实值,和这个验证码的编号,redis中,有效期 # redis数据类型:字符串,列表,hash,set... # key:val 采用字符串 # "image_code_编号1":"真实值" # redis_store.set(key,value) # redis_store.set("image_code_%s"%image_code_id,text) # redis_store.expire("image_code_%s"%image_code_id,constants.IMAGE_CODE_REDIS_EXPIRES) 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(errcode=RET.DBERR, errmsg="数据库异常") # 返回验证码图片 return image_data, 200, {"Content-Type": "image/jpg"}
def get_image_code(image_code_id): """获取图片验证码, 返回验证码图片""" # 1. 获取参数 url中已经获取 # 2. 校验参数 参数存在,无其他校验 # 3. 业务逻辑 # 3.1 生成验证码图片 # 名字 真实文本 图片数据 name, text, image_data = captcha.generate_captcha() # 3.2 将图片和编号存储到redis # redis_store.set("image_code_%s" % image_code_id, text) # redis_store.expire("image_code_%s" % image_code_id, IMAGE_CODE_REDIS_EXPIRES) try: # 防止redis连接中断 redis_store.setex("image_code_%s" % image_code_id, IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 记录日志 current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="save image_code _id failed") # 4. 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(image_code_id): """ 获取图片验证码 :param: image_code_id: 图片验证编号 :return: 正常:验证码图片 异常: 返回json """ # 业务逻辑处理 # 生成验证码图片 # 名字,真实文本,图片数据 name, text, image_data = captcha.generate_captcha() # 将验证码真实值与编号保存到redis中,设置有效期 3分钟 # redis: 字符串 列表 哈希(键值对) set # "key": xxx "image_codes": {"编号1": "文本1", "编号2": "文本2"} # 哈希 hset("image_codes", "id1", "abc") hget("image_codes", "id1") # 使用哈希维护有效期的时候只能整体设置 有效期结束 就整条记录删除 pass # 单条维护记录 选用字符串 "image_code_编号": "真实值" # redis_store.set("image_code_%s" % image_code_id, text) # redis_store.expire("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) # 记录名字 有效期 记录值 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="save image code id failed") return jsonify(errno=RET.DBERR, errmsg="保存图片验证码失败") # 返回图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def get_image_code(image_code_id): """提供图片验证码""" # 业务处理 # 生成验证码图片 # 名字, 验证码真实值,图片的二进制内容 name, text, image_data = captcha.generate_captcha() try: # 保存验证码的真实值与编号 # redis_store.set("image_code_%s" % image_code_id, text) # redis_store.expires("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) # 设置redis的数据与有效期 redis_store.setex("image_code_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 在日志中记录异常 current_app.logger.error(e) resp = { "errno": RET.DBERR, # "errmsg": "save image code failed" "errmsg": "保存验证码失败h" } return jsonify(resp) # 返回验证码图片 resp = make_response(image_data) resp.headers["Content-Type"] = "image/jpg" return resp
def generate_image_code(image_code_id): """ 生成图片验证码 1.导入使用captcha包扩展包,生成图片验证码,name,text,image 2.在服务器中保存图片验证码,保存到redis中, 3.如果保存失败,返回错误信息,保存到日志中 4.返回图片,使用make_response对象 :param image_code_id: :return: """ # 生成图片验证码 name, text, image = captcha.generate_captcha() # 保存图片验证码到redis中 try: redis_store.setex('ImageCode_' + image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 记录错误日志信息 current_app.logger.error(e) # 返回错误结果 return jsonify(errno=RET.DBERR, errmsg="保存图片验证码失败") # 如果未发生错误执行else else: # 使用响应对象响应图片 response = make_response(image) # 返回结果 return response
def generate_image_code(image_code_id): """ 生成图片验证码 1/导入使用captcha扩展包,生成图片验证码,name/text/image 2/在服务器保存图片验证码,保存到redis中, 3/如果保存失败,返回错误信息,记录日志current_app 4/返回图片,使用make_response对象 :param image_code_id: :return: """ # 生成图片验证码 name,text,image = captcha.generate_captcha() # 保存图片验证码到redis中 try: redis_store.setex('ImageCode_' + image_code_id,constants.IMAGE_CODE_REDIS_EXPIRES,text) except Exception as e: # 记录错误日志信息 current_app.logger.error(e) # 返回错误信息 return jsonify(errno=RET.DBERR,errmsg='保存图片验证码失败') # 如果未发生异常,执行else else: # 使用响应对象返回图片 response = make_response(image) # 设置响应的数据类型 response.headers['Content-Type'] = 'image/jpg' # 返回结果 return response
def get_image_code(): """ 产生图片验证码: 1.接收参数(图片验证码标识)并进行校验 2.生成图片验证码 3.在redis中保存图片验证码 4.返回验证码图片 """ # 1.接收参数(图片验证码标识)并进行校验 image_code_id = request.args.get("cur_id") if not image_code_id: return jsonify(errno=RET.PARAMERR, errmsg="缺少参数") # 2.生成图片验证码 # 文件名称 验证码文本 验证码图片内容 name, text, content = captcha.generate_captcha() # 测试输出图片验证码 current_app.logger.info('图片验证码是:%s' % text) # 3.在redis中保存图片验证码 # redis_store.set('key', 'value', 'expires') try: redis_store.set('imagecode:%s' % image_code_id, text, constants.IMAGE_CODE_REDIS_EXPIRES) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.PARAMERR, errmsg="保存图片验证失败") # 4.返回验证码图片 response = make_response(content) # 指定返回内容的类型 response.headers["Content-Type"] = "image/jpg" return response
def generate_image_code(image_code_id): """ 生成图片验证码 1/调用captcha扩展包,生成图片验证码,name,text,image 2/把图片验证码存入redis缓存中,设置过期时间 3/返回图片验证码,需要设置响应类型 :param image_code_id: :return: """ # 调用captcha扩展包,生成图片验证码 name, text, image = captcha.generate_captcha() # 把图片验证码存入redis数据库中 try: redis_store.setex('ImageCode_' + image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 记录错误日志信息 current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='保存图片验证码失败') else: # 返回前端图片 response = make_response(image) # 需要设置响应类型 response.headers['Content-Type'] = 'image/jpg' # 返回结果 return response
def get_image_code(image_code_id): """ 获取验证码图片 :param image_code_id: 图片验证码编号 :return: 如果出现异常,返回异常信息,否则,返回验证码图片 """ # 生成验证码图片 # 名字,真是文本,图片数据 name, text, image_code = captcha.generate_captcha() # 将编号以及验证码的真实值保存到redis(选择字符串)中,并设置有效期(自定义有效期为180秒,设置成了常量,在constants中) # redis_store.set('iamge_code_%s' % image_code_id, text) # redis_store.expire('image_code_%s' % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES) # 将以上合并写 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) # 出现异常,返回json格式的提示 # return jsonify(errno=RET.DBERR, errmsg="save image code failed") return jsonify(errno=RET.DBERR, errmsg="保存图片验证码失败") # 没有异常 返回验证码图片,并指定一下Content-Type(默认为test/html)类型为image,不改不认识图片 resp = make_response(image_code) resp.headers['Content-Type'] = 'image/jpg' return resp
def get_image_codes(image_code_id): # 前端传递uuid -->服务器生成验证码(文本和图片)--> 存储到redis中:image_code_id:text--> 返回图片数据 # 生成图像验证码 name, text, image_data = captcha.generate_captcha() # 存储到Redis中 设置过期时间180s setex # 参数 key expiretime value # image_code_image_code_id 180 text try: redis_store.setex('image_code_%s' % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRE, text) except Exception as e: # 记录错误日志 logging.error(e) resp_dict = { 'errno': RET.DBERR, 'errmsg': '设置redis错误' } return jsonify(resp_dict) # 返回图片 resp = make_response(image_data) resp.headers['Content-Type'] = 'image/jpg' return resp
def generate_image_code(image_code_id): """ 生成图片验证码 1.调用captcha扩展,生成图片验证码, name,text,image 2.存储图片验证码,保存在redis中 3.返回前端图片验证码,设置响应数据类型 :param image_code_id: :return: """ # 调用扩展,生成图片验证码 name, text, image = captcha.generate_captcha() # 调用redis数据库,存储图片验证码内容 try: redis_store.setex('ImageCode_' + image_code_id,constants.IMAGE_CODE_REDIS_EXPIRES, text) except Exception as e: # 记录错误的日志 current_app.logger.error(e) # 返回前端错误信息 return jsonify(errno=RET.DBERR, errmsg='保存图片验证码失败') else: # 返回图片 response = make_response(image) response.headers['Content-Type'] = 'image/jpg' return response