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中使用正则表达式的方法
Aug 13 Python
django基础之数据库操作方法(详解)
May 24 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
详解python多线程之间的同步(一)
Apr 03 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
django框架两个使用模板实例
Dec 11 Python
Python定时器线程池原理详解
Feb 26 Python
Python使用type动态创建类操作示例
Feb 29 Python
在python中利用pycharm自定义代码块教程(三步搞定)
Apr 15 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
python3让print输出不换行的方法
Aug 24 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 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/04/01 PHP
帝国cms常用标签汇总
2015/07/06 PHP
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
Python contextlib模块使用示例
2015/02/18 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
Django之模型层多表操作的实现
2019/01/08 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
信息工程学院毕业生推荐信
2013/11/05 职场文书
省文明单位申报材料
2014/05/08 职场文书
领导干部保密承诺书
2014/08/30 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
警示教育观后感
2015/06/17 职场文书
学校标语口号大全
2015/12/26 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python