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的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
python编程培训 python培训靠谱吗
Jan 17 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
Python守护进程实现过程详解
Feb 10 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 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
thinkPHP中session()方法用法详解
2016/12/08 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
js评分组件使用详解
2017/06/06 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
Python sys.path详细介绍
2013/10/17 Python
Python中的默认参数详解
2015/06/24 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
Python 寻找局部最高点的实现
2019/12/05 Python
在python中使用nohup命令说明
2020/04/16 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
语文教育专业应届生求职信
2013/11/23 职场文书
小学母亲节活动方案
2014/03/14 职场文书
学生安全责任书模板
2014/07/25 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
2015年售票员工作总结
2015/04/29 职场文书
python析构函数用法及注意事项
2021/06/22 Python
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js