web项目011-----图形验证码的借口定义

图形验证码的借口定义

web项目011-----图形验证码的借口定义

接下来我们要用代码实现上述功能,我们要养成写注释的好习惯

首先我们要生成验证码,直接调用我们写好的生成图片验证码的库

from lghome.utils.captcha.captcha import captcha

我们之前讲过,这个方法会生成两个值,一个是验证码,一个是图片

web项目011-----图形验证码的借口定义

所以我们赋值两个值,text就是验证码的文本信息,image_data就是图片数据

from . import api
from lghome.utils.captcha.captcha import captcha

@api.route("/image_codes/<image_code_id>")
def get_image_code(image_code_id):
    """
    获取图片验证码
    :param image_code_id:图片的编号
    :return:验证码,验证码图像
    """
    # 验证参数
    # 业务逻辑处理
    # 生成验证码图片
    text,image_data = captcha.generate_captcha()

接下来我们需要保存验证码并设置过期时间

@api.route("/image_codes/<image_code_id>")
def get_image_code(image_code_id):
    """
    获取图片验证码
    :param image_code_id:图片的编号
    :return:验证码,验证码图像
    """
    # 验证参数
    # 业务逻辑处理
    # 生成验证码图片
    text,image_data = captcha.generate_captcha()
    # 保存验证码到Redis
    redis_store.setex('image_code_%s'% image_code_id,60,text)

 setex这个方法不一定会成功,如果出现异常,我们要捕捉线上的错误日志,我们要倒入logging库

如果我们保存失败了,我们就不需要他继续往下了,所以我们直接return,返回的是什么呢,是json的字符串

倒入jsonify库,这里需要与前端沟通,询问需要返回什么,这里我们可以直接去看我们的js文件中的数据

web项目011-----图形验证码的借口定义

    text,image_data = captcha.generate_captcha()
    # 保存验证码到Redis
    try:
        redis_store.setex('image_code_%s'% image_code_id,60,text)
    except Exception as e:
        logging.error(e)
        return jsonify(errno=400,errmsg='保存图片验证码失败')

 下面这个60秒还有400的errno是不是有可能在其他地方也用到,可能出现的重复代码,我们不需要重复写,我们定义一个文件来存放我们的重复代码

web项目011-----图形验证码的借口定义

我们创建一个存放常量的文件constans.py文件

#图片验证码的有效期,单位秒
IMAGE_CODE_REDIS_EXPIRES = 180

导入库

from lghome import constans

然后修改verify_code.py文件

web项目011-----图形验证码的借口定义

然后是我们的状态码,但是一般我们的状态码都有一个单独存放的文件,这里我们直接复制进来

以为这两个文件与业务逻辑没有关系,所以我们放到lghome目录下

web项目011-----图形验证码的借口定义

导入库 

from lghome.response_code import RET

修改verify_code.py文件

web项目011-----图形验证码的借口定义

如果上面的程序没有出错,已经把验证码保存到redis中了,接下来我们就应该返回图片了

web项目011-----图形验证码的借口定义

但是我们这样直接return iamge_data浏览器不认识鸭,我们打开浏览器观察一下

我们随便点一张图片查看他的Headersweb项目011-----图形验证码的借口定义

我们在看一下不是图片的,普通的文件的Headersweb项目011-----图形验证码的借口定义

他不是图片类型,所以如果我们不修改的话浏览器就是不认识他的

所以我们不能直接返回

我们需要使用make_response

导入库

from flask import jsonify,make_response

 修改herders中的Content-type值

#返回值
    response = make_response(image_data)
    response.headers['Content-Type'] = 'image/jpg'
    return response

最后别忘了在我们的蓝图文件下注册路由

web项目011-----图形验证码的借口定义

否则是访问不到路由的

访问网址

web项目011-----图形验证码的借口定义显示出了我们的图形验证码

我们可以在cmd中查看我们的Redis

首先需要进入到我们的redis的文件夹中

web项目011-----图形验证码的借口定义

web项目011-----图形验证码的借口定义

通过命令启动,然后就可以查看redis了

web项目011-----图形验证码的借口定义

我们刷新网页得到了新的验证码。获取一下他的值

web项目011-----图形验证码的借口定义

web项目011-----图形验证码的借口定义成功

再试一下,成功

web项目011-----图形验证码的借口定义

上一篇:thinkphp5调用验证码并校验是否正确的方法整理


下一篇:图片验证码