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实现定时播放mp3
Mar 29 Python
Python Property属性的2种用法
Jun 21 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
pytorch之inception_v3的实现案例
Jan 06 Python
Python模块 _winreg操作注册表
Feb 05 Python
通过python连接Linux命令行代码实例
Feb 18 Python
Flask模板引擎Jinja2使用实例
Apr 23 Python
详解python polyscope库的安装和例程
Nov 13 Python
Python 制作自动化翻译工具
Apr 25 Python
python unittest单元测试的步骤分析
Aug 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
一个ftp类(ini.php)
2006/10/09 PHP
PHP的引用详解
2015/02/22 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
3个用于数据科学的顶级Python库
2018/09/29 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
Python yield的用法实例分析
2020/03/06 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
怎样有效的进行自我评价
2013/10/06 职场文书
行政文员岗位职责
2013/11/08 职场文书
售后主管岗位职责
2013/12/08 职场文书
医院护士的求职信范文
2013/12/26 职场文书
平面设计专业求职信
2014/08/09 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python
Python基于百度API识别并提取图片中文字
2021/06/27 Python
Python 阶乘详解
2021/10/05 Python
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫