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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
python使用循环实现批量创建文件夹示例
Mar 25 Python
python实现从web抓取文档的方法
Sep 26 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
python可视化实现代码
Jan 15 Python
python使用turtle绘制国际象棋棋盘
May 23 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
Django项目中使用JWT的实现代码
Nov 04 Python
Python修改列表值问题解决方案
Mar 06 Python
如何通过安装HomeBrew来安装Python3
Dec 23 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
php利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
PHP实现的日历功能示例
2018/09/01 PHP
js正则表达式的使用详解
2013/07/09 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
python标准日志模块logging的使用方法
2013/11/01 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
python实现报表自动化详解
2017/11/16 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
python爬虫之遍历单个域名
2019/11/20 Python
python实现udp聊天窗口
2020/03/31 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
美国手机支架公司:PopSockets
2019/11/27 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
怎样写好创业计划书的内容
2014/02/06 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
预备党员承诺书
2014/03/25 职场文书
上课说话检讨书
2015/01/27 职场文书