图片验证码和短信验证码开发
tip :前后端分离,先开发后端,后完善前端
一、图片验证码流程
1、引入captcha包放入utils
不是独立的第三方包放入utils,独立的包放入libs里面
- captcha.py 里的生成验证码方法
captcha.generate_captcha()
- response_code.py 是各种的错误返回说明
- commons.py 是定义的正则表达转换器
from werkzeug.routing import BaseConverter
# 定义正则转换器
class ReConverter(BaseConverter):
""""""
def __init__(self, url_map, regex):
# 调用父类的初始化方法
super(ReConverter, self).__init__(url_map)
# 保存正则表达式
self.regex = regex
2.定义验证码api路由 verify.py
GET 127.0.0.1/api/v1.0/image_codes/<image_code_id>
, 保存到redis 数据库,但是redis数据类型 redis: 字符串 列表 哈希 set
的键值对,不能用列表,[列表里只能是字符串,不能放{键值对}],哈希可以用,但是使用哈希维护有效期的时候只能整体设置,想要单条维护因此选用字符串。连接redis保存数据和设置有效期redis_store.setex("image_code_%s" % image_code_id, 180, text)
其中180s 是常量,可以放置在一个单独的constants.py
constants.py
# coding:utf-8
# 图片验证码的redis有效期, 单位:秒
IMAGE_CODE_REDIS_EXPIRES = 180
# 短信验证码的有效期
SMS_CODE_REDIS_EXPIRES = 300
# 短信验证码的间隔
SEND_SMS_CODE_INYERVAL = 6
verify.py
# 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: 正常:验证码图片 异常:返回json
"""
# 业务逻辑处理
# 生成验证码图片
# 名字,真实文本, 图片数据
name, text, image_data = captcha.generate_captcha()
# 将验证码真实值与编号保存到redis中, 设置有效期
# re