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中的sort方法使用详解
Jul 25 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
Python程序打包工具py2exe和PyInstaller详解
Jun 28 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
使用python远程操作linux过程解析
Dec 04 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
Python如何急速下载第三方库详解
Nov 02 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
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
php实现Session存储到Redis
2015/11/11 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
Python实现网站注册验证码生成类
2017/06/08 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
python监控键盘输入实例代码
2018/02/09 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
python利用faker库批量生成测试数据
2020/10/15 Python
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
英语专业毕业生自我鉴定
2013/11/09 职场文书
抄作业检讨书
2014/02/17 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
学生手册评语
2014/05/05 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA