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实现的多线程端口扫描工具分享
Jan 21 Python
python 爬取微信文章
Jan 30 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
python 寻找离散序列极值点的方法
Jul 10 Python
django组合搜索实现过程详解(附代码)
Aug 06 Python
Python list运算操作代码实例解析
Jan 20 Python
pygame实现弹球游戏
Apr 14 Python
python中format函数如何使用
Jun 22 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
如何在vscode中安装python库的方法步骤
Jan 06 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
JAVA/JSP学习系列之四
2006/10/09 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
项目实践之javascript技巧
2007/12/06 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
python操作excel的方法
2018/08/16 Python
Django REST framework 分页的实现代码
2019/06/19 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
经贸专业毕业生求职信
2014/03/23 职场文书
领导干部考核评语
2015/01/04 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python