首页 > 其他分享 >Pillow模块——生成随机验证码

Pillow模块——生成随机验证码

时间:2023-05-11 19:22:19浏览次数:34  
标签:code obj io img random 验证码 模块 Pillow png

urls.py

path('get_code/',views.get_code),

views.py中

from PIL import Image,ImageFont,ImageDraw
"""
Image		产生图片
ImageFont	字体样式
ImageDraw	画笔对象
"""

from io import BytesIO,StringIO
"""
BytesIO     在内存中临时存储 读取的时候以bytes格式为准
StringIO    在内存中临时存储 读取的时候以字符串格式为准
"""

import random
def get_random()
	return random.randint(0,255),random.randint(0,255),random.randint(0,255)
	
def get_code_func(request)
    # 1.推导步骤1:直接读取图片文件返回
    # with open(r'F:\BBS\static\img\123.png','rb') as f:
    #     data = f.read()
    # return HttpResponse(data)
    # 2.推导步骤2:随机产生图片动态返回 第三方pillow模块
    # img_obj = Image.new('RGB',(350,35),'green')
    # with open(r'xxx.png','wb') as f:
    #     img_obj.save(f,'png')
    # with open(r'xxx.png','rb') as f:
    #     data = f.read()
    # return HttpResponse(data)
    # 3.推导步骤3:针对图片的保存与读取做优化 内存管理器
    # img_obj = Image.new('RGB',(350,35),'yellow')
    # io_obj = BytesIO()
    # img_obj.save(io_obj,'png')
    # return HttpResponse(io_obj.getvalue())
    # 4.推导步骤4:图片颜色是可以随机变换的
    # img_obj = Image.new('RGB',(350,35),get_random())
    # io_obj = BytesIO()
    # img_obj.save(io_obj,'png')
    # return HttpResponse(io_obj.getvalue())
    # 5.推导步骤5:编写验证码
    # 先产生图片对象
    img_obj = Image.new('RGB',(350,35),get_random())
    # 将图片对象交给画笔对象
    draw_obj = ImageDraw.Draw(img_obj)
    # 确定字体样式(ttf文件)
    font_obj = ImageFont.truetype('static/font/123.ttf',35)
    # 产生随机验证码
    code = ''
    for i in range(5):
        random_upper = chr(random.randint(65,90))
        random_lower = chr(random.randint(97,122))
        random_int = str(random.randint(0,9))
        # 三选一
        temp_choice = random.choice([random_upper,random_lower,random_int])
        # 写到图片上
        draw_obj.text((i*60 + 45 ,0),temp_choice,font=font_obj)
        code += temp_choice
    # 后端保存验证码 便于后续的比对
    request.session['code'] = code
    io_obj = BytesIO()
    img_obj.save(io_obj,'png')
    return HttpResponse(io_obj.getvalue())

html页面中

<img src="/get_code/" alt="" style="根据实际情况设置" id="code">

// 验证码动态刷新
    $('#code').click(function () {
        let oldSrc = $(this).attr('src');
        $(this).attr('src', oldSrc + '?')
    })

标签:code,obj,io,img,random,验证码,模块,Pillow,png
From: https://www.cnblogs.com/XxMa/p/17391081.html

相关文章

  • Blackbox_exporter的HTTP模块配置Bearer令牌
    如果要监控需要携带token才能访问的接口,您可以使用Blackbox_exporter的HTTP模块配置Bearer令牌。以下是一个示例:安装和配置Blackbox_exporter。创建一个名为auth.yml的配置文件,并将其放置在Blackbox_exporter配置文件夹中。在auth.yml文件中,添加类似以下的配置:modules:  http_2x......
  • 将仓库下某个模块复制到新仓库并保留提交记录(非子库)
    在Git中,有时候我们需要将一个仓库中的某个模块复制到另一个仓库中,并且还需要保留提交记录。这个时候我们可以使用Gitsubtree命令来实现。例如:将本地某个仓库中的design-pattern文件夹下的所有文件拿出来作为一个新仓库以下是具体操作步骤:进入旧仓库中,使用以下命令将需要复制......
  • Java 9模块化关键字及应用场景
    一、背景SpringBoot3.0最低要求jdk17,为跟上节奏储备知识。二、简介关键字描述应用场景module定义一个模块代码隔离,依赖控制,代码可重用性openmodule定义一个像java9之前的开放模块像Java的旧版本那样允许完全反射exports...to指定模块的一部分对外提供......
  • Ansible-常用模块
    ping模块ping模块,这个很好理解,跟我们常用的ping命令是一样的,用来检测与目标主机的连通性[root@master~]#ansible192.168.142.45-mping192.168.142.45|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"},......
  • python基础学习-hashlib - 哈希函数模块
    hashlib-哈希函数模块参考地址:Python-Core-50-Courses/第20课:Python标准库初探.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)待补充......哈希函数又称哈希算法或散列函数,是一种为已有的数据创建“数字指纹”(哈希摘要)的方法。哈希函数把数据压缩成摘要,对......
  • python基础学习-os.path - 路径操作相关模块
    参考地址:Python-Core-50-Courses/第20课:Python标准库初探.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)待补充......os.path模块封装了操作路径的工具函数,如果程序中需要对文件路径做拼接、拆分、获取以及获取文件的存在性和其他属性,这个模块将会非常有帮助......
  • python基础学习-模块导入
    """一模块导入:[from模块名]import[模块|类|变量|函数|*][as别名]常用:import模块名from模块名import方法|类|变量from模块名import*import模块名as别名from模块名import功能名as别名如果模块中有_all_变量,当使用fromxxximport*导入时,只能......
  • nginx stream 模块
    stream模块一般用于tcp/UDP数据流的代理和负载均衡,用来实现四层协议的转发可以通过stream模块代理转发TCP消息。ngx_stream_core_module模块由1.9.0版提供。1.nginx-V确保nginx安装了–with-stream如果没有,重新用yuminstallnginx-y安装2.安装yum-yinstallepel-releas......
  • 【备忘】go build 使用代理解决部分模块或依赖无法下载的问题
    1、查看go版本goversion2、如果版本为1.13及以上goenv-wGO111MODULE=ongoenv-wGOPROXY=https://goproxy.io,direct低于1.13版本$env:GO111MODULE="on"$env:GOPROXY="https://goproxy.io"......
  • 验证码插件的使用
    验证码插件captcha-mini的使用使用yarnaddcaptcha-mini命令安装插件yarnaddcaptcha-minijs中引入验证码插件//引入验证码插件letCaptcha=require('captcha-mini')验证码实例化//1:验证码实例化letcaptcha1=newCaptcha({lineWidth:1......