Flask博客开发——登录验证码

这部分为Flask博客登录页面加个验证码。使用了PIL模块生成验证码图片,并通过Flask的session机制,进行验证码验证。

1、生成验证码

使用string模块:string.ascii_letters+string.digits构造了验证码字符组合。使用的PIL模块,构建了图形对象,并进行划线和高斯模糊处理。绘制字符串时,draw.text的前两个参数为字符的位置,可以设置为随机数,使验证码各字符的位置不固定,并且相邻字符略有重合。get_verify_code返回了图形对象和字符串。

import random import string from PIL import Image, ImageFont, ImageDraw, ImageFilter def rndColor(): '''随机颜色''' return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) def gene_text(): '''生成4位验证码''' return ''.join(random.sample(string.ascii_letters+string.digits, 4)) def draw_lines(draw, num, width, height): '''划线''' for num in range(num): x1 = random.randint(0, width / 2) y1 = random.randint(0, height / 2) x2 =http://www.likecs.com/ random.randint(0, width) y2 = random.randint(height / 2, height) draw.line(((x1, y1), (x2, y2)), fill=http://www.likecs.com/'black', width=1) def get_verify_code(): '''生成验证码图形''' code =http://www.likecs.com/ gene_text() # 图片大小120×50 width, height = 120, 50 # 新图片对象 im = Image.new('RGB',(width, height),'white') # 字体 font = ImageFont.truetype('app/static/arial.ttf', 40) # draw对象 draw =http://www.likecs.com/ ImageDraw.Draw(im) str = '' # 绘制字符串 for item in range(4): draw.text((5+random.randint(-3,3)+23*item, 5+random.randint(-3,3)), text=code[item], fill=rndColor(),font=http://www.likecs.com/font ) # 划线 draw_lines(draw, 2, width, height) # 高斯模糊 im = im.filter(ImageFilter.GaussianBlur(radius=1.5)) return im, code

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpffyg.html