PIL图像处理模块生成验证码

2023-05-16

Django学习第四天

验证码
因所学Django项目中含有登录模块,于是乎想着现在基本所有的登录界面都需要验证码,于是学习了一下如何生成验证码图片并将它返回到前端。

from PIL import Image,ImageDraw,ImageFont
import random
from io import BytesIO

def get_valid_img(request):
	# 生成随机颜色(随机RGB)
    def get_random_color():
        return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

    # 生成一个图片对象
    img_obj = Image.new(
        'RGB',
        (110, 35),
        get_random_color()
    )
    # 在生成的图片上写字符
    # 生成一个图片画笔对象
    draw_obj = ImageDraw.Draw(img_obj)
    # 加载字体文件, 得到一个字体对象
    font_obj = ImageFont.truetype("static/CALIST.TTF", 28) 
    # 字体文件为系统字体文件,笔者为win10系统,可在C:\Windows\Fonts中找到
    # 开始生成随机字符串并且写到图片上
    tmp_list = []
    a = ''
    for i in range(3):
        u = chr(random.randint(65, 90))  # 生成大写字母
        l = chr(random.randint(97, 122))  # 生成小写字母
        n = str(random.randint(0, 9))  # 生成数字,注意要转换成字符串类型

        tmp = random.choice([u, l, n])
        tmp_list.append(tmp)
        a += tmp
        draw_obj.text((0+40 * i, 0), tmp, fill=get_random_color(),font = font_obj)
    # print(a)
    request.session['check_num']=a #将正确的验证码存至session中,以便校对
    io_obj = BytesIO()
    img_obj.save(io_obj,'png')
    data = io_obj.getvalue()
    return HttpResponse(data,'image/png')

在路由中添加,user/urls.py

re_path(r'^yanzhengma',get_valid_img,name = 'valid'),#验证码

前端页面导入验证码图片

<img src="{% url 'user:valid' %}" alt=""/>

效果如下,笔者对前端了解不是很多故不是很美观,请大牛见谅
用户登录网页

笔者目前才刚刚开始django的学习,如有错误之处,请大牛见谅指出

转载于:https://www.cnblogs.com/big-cabbage/p/10300376.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PIL图像处理模块生成验证码 的相关文章

随机推荐