python如何生成网页验证码


Posted in Python onJuly 28, 2018

本文实例为大家分享了python生成网页验证码的具体代码,供大家参考,具体内容如下

验证码为pil模块生成,可直接应用于django框架当中。

首先需要安装Pillow模块 我们这里使用的版本为3.4.1
终端中直接输入指令 pip install Pillow==3.4.1

from PIL import Image, ImageDraw, ImageFont
from django.utils.six import BytesIO

def verify_code(request):
  #引入随机函数模块
  import random
  #定义变量,用于画面的背景色、宽、高
  bgcolor = (random.randrange(20, 100), random.randrange(
    20, 100), 255)
  width = 100
  height = 25
  #创建画面对象
  im = Image.new('RGB', (width, height), bgcolor)
  #创建画笔对象
  draw = ImageDraw.Draw(im)
  #调用画笔的point()函数绘制噪点
  for i in range(0, 100):
    xy = (random.randrange(0, width), random.randrange(0, height))
    fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
    draw.point(xy, fill=fill)
  #定义验证码的备选值
  str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
  #随机选取4个值作为验证码
  rand_str = ''
  for i in range(0, 4):
    rand_str += str1[random.randrange(0, len(str1))]
  #构造字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont”
  font = ImageFont.truetype('FreeMono.ttf', 23)
  #构造字体颜色
  fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
  #绘制4个字
  draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
  draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
  draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
  draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
  #释放画笔
  del draw
  #存入session,用于做进一步验证
  request.session['verifycode'] = rand_str
  #内存文件操作
  buf = BytesIO()
  #将图片保存在内存中,文件类型为png
  im.save(buf, 'png')
  #将内存中的图片数据返回给客户端,MIME类型为图片png
  return HttpResponse(buf.getvalue(), 'image/png'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用urlparse分析网址中域名的方法
Apr 15 Python
Python类属性与实例属性用法分析
May 09 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
python异步存储数据详解
Mar 19 Python
简单了解python单例模式的几种写法
Jul 01 Python
python实现简单成绩录入系统
Sep 19 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
通过实例解析python subprocess模块原理及用法
Oct 10 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
python3利用tcp实现文件夹远程传输
Jul 28 #Python
python使用tornado实现简单爬虫
Jul 28 #Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 #Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 #Python
Python Socket编程之多线程聊天室
Jul 28 #Python
python实现点对点聊天程序
Jul 28 #Python
基于python实现聊天室程序
Jul 27 #Python
You might like
ajax php 实现写入数据库
2009/09/02 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
js或css实现滚动广告的几种方案
2010/01/28 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
python实现在控制台输入密码不显示的方法
2015/07/02 Python
浅析python中的分片与截断序列
2016/08/09 Python
深入浅出学习python装饰器
2017/09/29 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
Python 3.8 新功能全解
2019/07/25 Python
flask项目集成swagger的方法
2020/12/09 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
个人党性锻炼总结
2015/03/05 职场文书
MySQL分库分表详情
2021/09/25 MySQL
Sql Server之数据类型详解
2022/02/28 SQL Server