- 使用redis进行保存
- redis数据结构使用字符串
- redis中保存真实验证码号以及验证码编号,编号由前端使用uuid生成,发送给后端
文件在
https://pan.baidu.com/s/1ltcDzwwN-2OsPwNN03x3zw 中的captche中
将文件放置在utils目录中,captcha中有使用方法,只需要调用接口并且使用即可。
目的:生成接口,并且连接redis数据库进行数据存储。
from . import api
from flask import jsonify, make_response
from ihome.utils.captcha.captcha import captcha
from flask import current_app
from ihome import redis_store,contstants
from ihome.utils.response_code import RET
# 这个接口属于内部接口,是由浏览器进行调用,所以对于image_code_id没有实行检验。
# GET 127.0.0.1/api/v1.0/image_codes/<image_code_id>
@api.route("/image_codes/<image_code_id>")
def get_image_code(image_code_id):
"""
获取图片验证码
: params image_code_id :图片验证码编号
return: 正常:验证码图片 异常:返回错误信息
"""
# 业务逻辑处理
# 生成验证码图片
# 名字, 真实文本, 图片数据
name, text, image_data = captcha.generate_captcha()
# 将验证码真实值与编号保存到redis中,设置有效期
# redis 数据类型
# hash list str set zset 使用哈希维护有效期时只能整体设置,不方便
# "key": value
# 单条维护记录选用字符串类型
# "image_code_编号":"真实值",
# redis_store.set("image_code_%s" % image_code_id, text)
# redis_store.expire("image_code_%s" %image_code_id, contstants.IMAGE_CODE_REDIS_EXPIRES)
# 记录名 验证码编号 验证码有效期 验证码文本
try:
redis_store.setex("image_code_%s" % image_code_id, contstants.IMAGE_CODE_REDIS_EXPIRES, text)
except Exception as e:
# 写入日志中
current_app.logger.error(e)
return jsonify(errno=RET.DBERR, errmsg="save image code failed...")
# 返回图片
resp = make_response(image_data)
resp.headers["Content-Type"] = "image/jpg"
return resp