Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
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
Exemple #11
0
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
Exemple #12
0
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
Exemple #13
0
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
Exemple #14
0
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
Exemple #15
0
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
Exemple #16
0
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
Exemple #17
0
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
Exemple #18
0
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
Exemple #19
0
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