热门IT资讯网

python怎么设置验证码功能

发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,本篇内容介绍了"python怎么设置验证码功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.导入

本篇内容介绍了"python怎么设置验证码功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.导入模块 并定义一个验证状态

from pil import image, imagedraw, imagefontfrom django.utils.six import bytesiodef verify_code(request):  #引入随机函数模块  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'  #随机选取4个值作为验证码  rand_str = ''  for i in range(0, 4):    rand_str += str1[random.randrange(0, len(str1))]  #构造字体对象,ubuntu的字体路径为"/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['verifycode'] = rand_str  #内存文件操作  buf = bytesio()  #将图片保存在内存中,文件类型为png  im.save(buf, 'png')  #将内存中的图片数据返回给客户端,mime类型为图片png  return httpresponse(buf.getvalue(), 'image/png')

3.在网页中直接放入img中

验证码

4.使用ajax 获取验证密码和账号

    login



请输入验证码
验证码
记住密码
点击到获取cookies

在上面 ajax 中 向服务器发送了 账号密码 和 验证码

在验证函数中

  yzm = request.post.get('yum')      # 获取传入的 验证码  vaue = request.session['verifycode']  # 生成图片的时候 把验证码存到了session 中   if yzm !=vaue:                #如果不相等的话会返回 3  html ajax 会显示验证错误     return jsonresponse({'res':3})

成果图:

"python怎么设置验证码功能"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0