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


Posted in Python onOctober 15, 2020

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

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之入门(五)缩进和选择
May 27 Python
python根据出生年份简单计算生肖的方法
Mar 27 Python
Python中字典的基本知识初步介绍
May 21 Python
基于python实现微信模板消息
Dec 21 Python
python机器学习之神经网络(三)
Dec 20 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
Django中的FBV和CBV用法详解
Sep 15 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
python关于集合的知识案例详解
May 30 Python
python获取对象信息的实例详解
Jul 07 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 #Python
如何在Win10系统使用Python3连接Hive
Oct 15 #Python
Python进行特征提取的示例代码
Oct 15 #Python
Python通过递归函数输出嵌套列表元素
Oct 15 #Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 #Python
Python return语句如何实现结果返回调用
Oct 15 #Python
python 进程池pool使用详解
Oct 15 #Python
You might like
全国中波电台频率表
2020/03/11 无线电
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
PHP XML操作类DOMDocument
2009/12/16 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
python中assert用法实例分析
2015/04/30 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
python 自动批量打开网页的示例
2019/02/21 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
linux下进程间通信的方式
2013/01/23 面试题
医学检验专业大学生求职信
2013/11/18 职场文书
晚宴邀请函范文
2014/01/15 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
2015年元旦标语大全
2014/12/09 职场文书
邀请函格式范文
2015/02/02 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
名人传读书笔记
2015/06/26 职场文书