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 pdb调试方法分享
Jan 21 Python
Python合并多个装饰器小技巧
Apr 28 Python
Python获取邮件地址的方法
Jul 10 Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
python 默认参数问题的陷阱
Feb 29 Python
Python中交换两个元素的实现方法
Jun 29 Python
python编辑用户登入界面的实现代码
Jul 16 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
Django微信小程序后台开发教程的实现
Jun 03 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获取文件夹大小函数用法实例
2015/07/01 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
JavaScript类库D
2010/10/24 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
园长自我鉴定
2013/10/06 职场文书
公务员年总结的自我评价
2013/10/25 职场文书
大学生个人自我鉴定
2013/12/03 职场文书
采购主管岗位职责
2014/02/01 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
单位推荐信范文
2015/03/27 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android