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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
浅谈使用Python变量时要避免的3个错误
Oct 30 Python
python-str,list,set间的转换实例
Jun 27 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
Python argparse模块应用实例解析
Nov 15 Python
pytorch 自定义参数不更新方式
Jan 06 Python
django2.2 和 PyMySQL版本兼容问题
Feb 17 Python
django 利用Q对象与F对象进行查询的实现
May 15 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 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
php4的session功能评述(一)
2006/10/09 PHP
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
php多线程并发实现方法
2016/09/30 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
javascript 对象的定义方法
2007/01/10 Javascript
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
2013/07/08 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
javascript自执行函数
2017/02/10 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python numpy 常用函数总结
2017/12/07 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python实现excel读写数据
2021/03/02 Python
用Django写天气预报查询网站
2018/10/21 Python
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
财经学院自荐信范文
2014/02/02 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
餐厅开业活动方案
2019/07/08 职场文书
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL
Spring Boot实现文件上传下载
2022/08/14 Java/Android