Django实现随机图形验证码的示例

 更新时间:2020年10月15日 16:26:04   作者:日天达人  
这篇文章主要介绍了Django实现随机图形验证码的示例,帮助大家更好的学习和使用django框架,感兴趣的朋友可以了解下

实现效果:点击右边图片验证码会变

前端代码:

<div class="container">
 <div class="row">
  <div class="col-md-6">
    <label for="yzm_id">验证码:</label>
    <input type="text" class="form-control" id="yzm_id" placeholder="" name="yzm">
   </div>
  <div class="col-md-6">
    <img id='yzm_img_id' src="/yzm/" alt="" style="width: 260px;height: 40px">
  </div>
  </div>
 <div> 

后端代码:

from PIL import Image,ImageDraw,ImageFont
from io import BytesIO,StringIO
#色彩的设置为(*,*,*),所以随机返回三个数
def r_num(number):
 #number为2指的是背景颜色,把背景颜色和字体颜色分开,不然当颜色一样时,不容易看到
 if number==2:
  return random.randint(0,128),random.randint(0,128),random.randint(0,128)
 #number==1指的是字体颜色,字体颜色深一些比较养眼
 if number == 1:
  return random.randint(128, 255), random.randint(128, 255), random.randint(128, 255)
def yzm(request):
 #创建一个Image对象,‘RGB'是颜色的模式。第二个参数是验证码的大小。第三个参数是三个随机数,当然也用英语单词指定颜色,比如red,这里为了随机性选择了用三个数字
 yzm_img=Image.new("RGB",(260,40),r_num(1))
 #为yzm_img对象创建一个画笔
 draw=ImageDraw.Draw(yzm_img)
 #指定字体的格式,ttf文件自己在网上下载,放入static文件夹中,40指的是字体的大小
 font=ImageFont.truetype('static/1.ttf',40)
 #存放验证码
 code=''
 #循环5次,所以验证码是5位
 for i in range(5):
  #随机0到9的数字
  random_num=str(random.randint(0,9))
  #随机65到90的数字,chr是把数字对比ASCLL码表转为字母。65到90是大写字母
  random_up=str(chr(random.randint(65,90)))
  #同上,随机小写字母
  random_low=str(chr(random.randint(97,122)))
#从三个字符中随机选取出一个  
 random_code=random.choice([random_num,random_up,random_low])
  #把字符写入图片。第一个参数(x,y),坐标,如果坐标位置写死,那么将会全部挤到一起,第二个参数,指定写入的字符。第三参数指定字符的格式
  draw.text((45*i,-5),random_code,r_num(2),font)
  code+=random_code
 io_obj=BytesIO()
 #把图片存放到内存空间中
 yzm_img.save(io_obj,'png')
 #给session中添加验证码
 request.session['code']=code
 #返回二进制数据
 return HttpResponse(io_obj.getvalue())

现在刷新就可以刷新验证码了

还差点击验证码就能更换验证码

前端脚本代码:

这里这么写是因为只要在地址后面加上字符,那么就刷新图片

 $('#yzm_img_id').click(function () {
  var path2 = $(this).attr('src');
  $(this).attr('src', path2 += '?')
 });

以上就是Django实现随机图形验证码的示例的详细内容,更多关于Django 图形验证码的资料请关注脚本之家其它相关文章!

相关文章

  • Python多线程如何同时处理多个文件

    Python多线程如何同时处理多个文件

    这篇文章主要介绍了Python多线程如何同时处理多个文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 使用Python实现简单的爬虫框架

    使用Python实现简单的爬虫框架

    爬虫是一种自动获取网页内容的程序,它可以帮助我们从网络上快速收集大量信息。下面我们将学习如何使用 Python 编写一个简单的爬虫框架,感兴趣的可以了解一下
    2023-05-05
  • python实现引用其他路径包里面的模块

    python实现引用其他路径包里面的模块

    这篇文章主要介绍了python实现引用其他路径包里面的模块,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python数组定义方法

    Python数组定义方法

    这篇文章主要介绍了Python数组定义方法,结合实例形式分析了Python一维数组与二维数组的定义方法与相关注意事项,需要的朋友可以参考下
    2016-04-04
  • 深入理解PyTorch中的nn.Embedding的使用

    深入理解PyTorch中的nn.Embedding的使用

    本文主要介绍了PyTorch中的nn.Embedding的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Python学习之os包使用教程详解

    Python学习之os包使用教程详解

    本文将详细介绍python的内置包——OS 包。OS 包拥有着普遍的操作系统功能,拥有着各种各样的函数来操作系统的驱动功能。快来跟随小编一起学习一下OS包的使用方法吧
    2022-03-03
  • python 返回一个列表中第二大的数方法

    python 返回一个列表中第二大的数方法

    今天小编就为大家分享一篇python 返回一个列表中第二大的数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python多进程库multiprocessing中进程池Pool类的使用详解

    Python多进程库multiprocessing中进程池Pool类的使用详解

    这篇文章主要介绍了Python多进程库multiprocessing中进程池Pool类的使用详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • PyTorch中Tensor的数据统计示例

    PyTorch中Tensor的数据统计示例

    今天小编就为大家分享一篇PyTorch中Tensor的数据统计示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python查看微信好友是否删除自己

    python查看微信好友是否删除自己

    这篇文章主要为大家详细介绍了python查看微信好友是否删除自己,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12

最新评论