Django开发中使用验证码(随手笔记)

在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')
发布了36 篇原创文章 · 获赞 75 · 访问量 5443

猜你喜欢

转载自blog.csdn.net/weixin_44449518/article/details/101298860