Django之验证码
文章参考:https://www.cnblogs.com/cage0515/p/9989126.html
平台:pycharm专业版,解释器python3.7,Pillow5.1.1
提示:pycharm里面安装或者Windows下安装可能出现超时报错提示Read timed out,可以参考链接解决https://www.cnblogs.com/ljxh/p/11094363.html
下面4步只是简单的能够在URL:http://127.0.0.1:8000/verifycode【这个是pycharm配置的服务器地址和URL配置地址,可以根据自己的配置灵活输入】上显示如下所示的效果,完整的登录示例见链接:【后续补上】
1、导入模块
# 导入验证码需要的模块 from django.http import HttpResponse #引入绘图模块 from PIL import Image, ImageDraw, ImageFont #引入随机函数模块 import random # 内存文件操作 import io
2、配置视图函数
# verify_code,需要引入的模块放在了视图文件的头部 def verifycode(request): # 定义变量,用于画面的背景色、宽、高 RGB bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255) width = 100 height = 30 #创建画面对象 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' str1 = '123456789' #随机选取4个值作为验证码 rand_str = '' for i in range(0, 4): rand_str += str1[random.randrange(0, len(str1))] #构造字体对象,注意此处为windows内置字体 font = ImageFont.truetype('ebrima.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['verifycode'] = rand_str buf = io.BytesIO() #将图片保存在内存中,文件类型为png im.save(buf, 'png') #将内存中的图片数据返回给客户端,MIME类型为图片png return HttpResponse(buf.getvalue(), 'image/png')
3、配置URL路由【在应用的URL里面配置和项目的URL里面进行配置均可】
url(r'^verifycode$', views.verifycode) # 验证码显示视图函数
4、浏览器地址访问URL:http://127.0.0.1:8000/verifycode
显示界面如下: