python3 pillow生成简单验证码图片的示例

使用Python的pillow模块 random 模块随机生成验证码图片,并应用到Django项目中

安装pillow

$ pip3 install pillow

生成验证码图片

\vericode.py

from PIL import Image,ImageDraw,ImageFont,ImageFilter

import random

#随机码 默认长度=1

def random_code(lenght=1):

code = ''

for char in range(lenght):

code += chr(random.randint(65,90))

return code

#随机颜色 默认颜色范围【1,255】

def random_color(s=1,e=255):

return (random.randint(s,e),random.randint(s,e),random.randint(s,e))

#生成验证码图片

#length 验证码长度

#width 图片宽度

#height 图片高度

#返回验证码和图片

def veri_code(lenght=4,width=160,height=40):

#创建Image对象

image = Image.new('RGB',(width,height),(255,255,255))

#创建Font对象

font = ImageFont.truetype('Arial.ttf',32)

#创建Draw对象

draw = ImageDraw.Draw(image)

#随机颜色填充每个像素

for x in range(width):

for y in range(height):

draw.point((x,y),fill=random_color(64,255))

#验证码

code = random_code(lenght)

#随机颜色验证码写到图片上

for t in range(lenght):

draw.text((40*t+5,5),code[t],font=font,fill=random_color(32,127))

#模糊滤镜

image = image.filter(ImageFilter.BLUR)

return code,image

应用

编写Django应用下的视图函数

\views.py

from . import vericode.py

from io import BytesIO

from django.http import HttpResponse

def verify_code(request):

f = BytesIO()

code,image = vericode.veri_code()

image.save(f,'jpeg')

request.session['vericode'] = code

return HttpResponse(f.getvalue())

def submit_xxx(request):

if request.method == "POST":

vericode = request.session.get("vericode").upper()

submitcode = request.POST.get("vericode").upper()

if submitcode == vericode:

return HttpResponse('ok')

return HttpResponse('error')

这里使用了Django的session,需要在Django settings.py的INSTALLED_APPS中添加'django.contrib.sessions'(默认添加)

verify_code视图函数将验证码添加到session中和验证码图片一起发送给浏览器,当提交表单到submit_xxx()时,先从session中获取验证码,再对比从表单中的输入的验证码。

这里只是简单说明,url配置和前端代码未给出。

以上是 python3 pillow生成简单验证码图片的示例 的全部内容, 来源链接: utcz.com/z/350608.html

回到顶部