文章目录
基本思路
使用PIL库动态创建验证码图片,用FileReponse将验证码图片返回客户端用session对象保存验证码,用于判断输入验证码是否正确。
`
一、使用步骤
1.引入库(视图函数中)
PIL没有需要自己安装,编译器会提示。
2.定义函数获取随机字符
代码如下(示例):
def getRandomChar():
num = str(randint(0, 9))
lower = chr(randint(97, 122))
upper = chr(randint(65, 90))
char = choice([num, lower, upper])
return char
3.定义试图函数创建图形验证码图片
def createImg(request):
img = Image.new(mode="RGB", size=(160, 30), color=(100, 100, 100))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype(font="arial.ttf", size=24)
code = ''
for i in range(5):
c = getRandomChar()
draw.text((10 + 30 * i, 2), text=c, fill=(255, 255, 255), font=font)
code += c
request.session['random-code'] = code
f = open("test.png", 'wb')
img.save(f, format="png")
f.close()
return FileResponse(open("test.png", 'rb'))
4.定义试图函数使用图形验证码
def imgCheckCode(request):
form = '<p>验证码的实现</p>' \
'<form name="input" action="/docheck" method="post">' \
+ '<a href="/getcheck"><img src="/getpng"></a>单击图片刷新<br>' \
+ '请输入图中的校验码:<input type= "text" name = "code" maxlength=5 size=8>' \
+ '<input type="submit" value="提交"><form>'
return HttpResponse(form)
5.定义试图函数验证图形验证码
def verifyCode(request):
out = "验证码不正确!"
if request.POST['code'].upper() == request.session['random-code'].upper():
out = "验证码正确!"
return HttpResponse(out)
6.URL访问配置
urlpatterns = [
path('getpng',views.createImg),
path('getcheck/', views.imgCheckCode),
path('docheck', csrf_exempt(views.verifyCode))
]
通过python manage.py runserver命令启动,进入127.0.0.1:8000/getcheck/
效果展示