在Django中使用图片验证码,需要以下几个步骤:
【1】安装pillow: pip install pillow
【2】需要找到一个图片验证码
方便起见,图片验证码写在 views.py中,如图所示:方便测试复制,源码放在博客末尾
【3】在urls.py
配置url,并在主页面中开辟出一块空间来显示验证信息。
【4】在 views.py文件中,配置验证信息 并 测试
最后还有,Ubantu的字体文件存放的路径
图片验证码源码:
from PIL import Image, ImageDraw, ImageFont
from django.utils.six import BytesIO
def check_code(request):
# 引入随机函数模块
import random
# 定义变量,用于画出画面的背景颜色,宽高(rgb)
bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)
width = 100;
height = 25;
# 创建画面对象
im = Image.new('RGB', (width,height),bgcolor)
# 创建画笔对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(0, 100):
xy = (random.randrange(0,width), random.randrange(0, height))
fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
draw.point(xy, fill=fill)
# 定义验证码备选值
str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
# 随机选取四个值作为验证码
rand_str = ''
for i in range(0,4):
rand_str += str1[random.randrange(0, len(str1))]
# Ubantu字体文件所在目录: /usr/share/fonts/truetype/freefont
font = ImageFont.truetype('FreeMono.ttf',23)
# 构造字体颜色
fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
# 绘制4个字
draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
# 释放画笔
del draw
# 存入session,用于进一步验证
request.session['checkcode'] = rand_str
# 内存文件操作
buf = BytesIO()
# 将图片保存在内存中,文件类型为png
im.save(buf,'png')
# 将内存中的图片数据返回给客户端,MIME类型为图片png
return HttpResponse(buf.getvalue(), 'image/png')