栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 图片验证码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 图片验证码

 

1.图片验证码第一步

# 导入绘图库
from PIL import ImageDraw, Image, ImageFont

2.生成图片验证类

 

# 图片验证类
class ImgCode(BaseHandler):

    # 定义随机颜色实例方法
    def get_random_color(self):

        R = random.randrange(255)
        G = random.randrange(255)
        B = random.randrange(255)

        return (R, G, B)

    # 生成文件流验证码
    async def get(self):
        email = self.get_argument('email', None)
        if not email:
            self.finish({"msg": '缺少唯一标识', "errcode": 0})
        # 定义画布
        img_size = (120, 50)
        # 定义画笔
        image = Image.new("RGB", img_size, self.get_random_color())
        draw = ImageDraw.Draw(image, 'RGB')

        # 绘制来源字符串
        source = "0123456789"
        # 定义容器
        code_str = ""
        # 循环绘制
        for i in range(4):
            # 获取一种颜色
            text_color = self.get_random_color()
            # 获取随机字符串
            tmp_num = random.randrange(len(source))
            random_str = source[tmp_num]
            # 收集容器中
            code_str += random_str

            # 导入系统字体
            myfont = ImageFont.truetype("C:\windows\fonts\arial.ttf", 20)
            # 绘制
            draw.text((10 + 30 * i, 20), random_str, text_color)

        # 存储图片对象
        self.application.redis.set(email, code_str)

        # 获取内存缓冲区
        buf = io.BytesIO()
        # 保存图片对象
        image.save(buf, "png")
        # 设置头部声明
        self.set_header("Content-Type", "image/png")
        # 返回
        return self.write(buf.getvalue())

3.封装验证码

# 视图验证码验证
def check_imgcode(func):
    async def wrapper(self, *args, **kwargs):
        email = self.get_argument('email', None)
        image_code = self.get_argument('image_code', None)
        redis_code = self.application.redis.get(email)

        if redis_code != image_code:
            return self.finish({'msg': '验证码有误', 'errcode': 3})

        # 执行被装饰方法
        await func(self, *args, **kwargs)

    return wrapper

4.调用封装方法

@check_imgcode
    async def post(self):
        pass

5.前端获取


                        
                    
                                      
                    

生成图片验证码

export default {
 data() {
    return {
     // 设置表单数据   
      
      img:this.baseurl+'imgcode/',
      img_code:'',
      isshow:0,
    }
  },
}

 

getimg:function(){
            // 生成随机数
            var num =Math.ceil(Math.random()*10)
            // 添加随机数
            this.img = this.baseurl+'imgcode/'+"?email="+this.email+'&v='+num
        },
        create_img:function(){
            if(this.email==''){
                this.$toast.fail('邮箱不能为空')
                return
            }
            if(this.isshow==0){
                // 增加邮箱参数
                this.img = this.img +'?email='+this.email
                // 展示表单和图片验证码
                this.isshow=1
            }else{
                this.getimg()
            }
            
        }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号