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 切片和range()用法说明
Mar 24 Python
列举Python中吸引人的一些特性
Apr 09 Python
python实现从字典中删除元素的方法
May 04 Python
python检查指定文件是否存在的方法
Jul 06 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
python内置函数sorted()用法深入分析
Oct 08 Python
python实现简单图书管理系统
Nov 22 Python
python线程信号量semaphore使用解析
Nov 30 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 20 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的FTP学习(一)
2006/10/09 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
python计数排序和基数排序算法实例
2014/04/25 Python
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
Java如何读取CLOB字段
2013/10/10 面试题
年终晚会主持词
2014/03/25 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
毕业生见习报告总结
2014/11/08 职场文书
2014年残联工作总结
2014/11/21 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
2015年药房工作总结
2015/04/25 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
单方投资意向书
2015/05/11 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
用php如何解决大文件分片上传问题
2021/07/07 PHP