版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z564359805/article/details/89919870
views.py中:
from django.shortcuts import render
from django.http import HttpResponse
# 验证码
def verifycode(request):
# 引入绘图模块
from PIL import Image, ImageDraw, ImageFont
import random
# 定义变量,用于画面的背景色、宽、高
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))]
# 打印出随机的值
# print(rand_str)
# 构造字体对象
font = ImageFont.truetype('./static/font/msyh.ttf',20)
# 构造字体颜色
fontcolor = (255,random.randrange(0,255),random.randrange(0,255))
# 创建文本,第一个值
draw.text((10, -2), rand_str[0], font=font, fill=fontcolor)
# 创建文本,后面三个值
for k in range(1,4):
draw.text((k*25,-2),rand_str[k],font=font,fill=fontcolor)
# draw.text((25,-3),rand_str[1],font=font,fill=fontcolor)
# draw.text((50,-3),rand_str[2],font=font,fill=fontcolor)
# draw.text((75,-3),rand_str[3],font=font,fill=fontcolor)
# 释放画笔
del draw
# 存入session,用于做进一步验证
request.session['verifycode'] = rand_str
# 内存文件操作
from io import BytesIO
buf = BytesIO()
# 将图片保存在内存中,文件类型为png
im.save(buf,'png')
# 将内存中的图片数据返回给客户端,MIME类型为图片png
return HttpResponse(buf.getvalue(),'image/png')
# 验证码输入
def verifyTest1(request):
return render(request,'verifyTest1.html')
# 返回验证结果,成功显示ok,失败显示no
def verifyTest2(request):
code1 = request.POST['code1']
code2 = request.session['verifycode']
if code1.upper() == code2: # 不区分大小写
return HttpResponse('ok')
else:
return HttpResponse('no')
templates新建verifyTest1.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>验证码测试</title>
</head>
<body>
<form action="/verifyTest2/" method="post">
{% csrf_token %}
<input type="text" name="code1">
<img id='verifycode' src="/verifycode/" alt="验证码">
<input type="submit" value="提交">
</form>
</body>
</html>
配置url,应用名为booktest:
from django.urls import path
from booktest import views
urlpatterns = [
path('verifycode/',views.verifycode),
path('verifyTest1/',views.verifyTest1),
path('verifyTest2/',views.verifyTest2),
]
启动服务:
python manage.py runserver