Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
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
Beispiel #13
0
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
Beispiel #14
0
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
Beispiel #15
0
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
Beispiel #16
0
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
Beispiel #17
0
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
Beispiel #18
0
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
Beispiel #20
0
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
Beispiel #21
0
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
Beispiel #22
0
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
Beispiel #23
0
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"}
Beispiel #24
0
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
Beispiel #25
0
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
Beispiel #27
0
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
Beispiel #28
0
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
Beispiel #29
0
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
Beispiel #30
0
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
Beispiel #31
0
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
Beispiel #32
0
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
Beispiel #33
0
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