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计算三维矢量幅度的方法
Jun 15 Python
windows下python连接oracle数据库
Jun 07 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
python二元表达式用法
Dec 04 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
python pptx复制指定页的ppt教程
Feb 14 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
最新pycharm安装教程
Nov 18 Python
使用pandas模块实现数据的标准化操作
May 14 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实现采集程序原理和简单示例代码
2007/03/18 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
php MYSQL 数据备份类
2009/06/19 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
Python中logging.NullHandler 的使用教程
2018/11/29 Python
python跳出双层for循环的解决方法
2019/06/24 Python
python 求10个数的平均数实例
2019/12/16 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
python 从list中随机取值的方法
2020/11/16 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
运动会广播稿30字
2014/01/21 职场文书
争先创优演讲稿
2014/09/15 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
奠基仪式致辞
2015/07/30 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android