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 Web开发模板引擎优缺点总结
May 06 Python
Python中字典的基本知识初步介绍
May 21 Python
Python学习小技巧之列表项的排序
May 20 Python
python3写爬取B站视频弹幕功能
Dec 22 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
Python管理Windows服务小脚本
Mar 12 Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
Python实现ATM系统
Feb 17 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
python读取hdfs并返回dataframe教程
Jun 05 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学习笔记之一
2011/01/17 PHP
drupal 代码实现URL重写
2011/05/04 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
My Desktop :) 桌面式代码
2008/12/29 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
通过数据库向Django模型添加字段的示例
2015/07/21 Python
python 性能提升的几种方法
2016/07/15 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
kali中python版本的切换方法
2019/07/11 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
买房子个人收入证明
2014/01/16 职场文书
社区包粽子活动方案
2014/01/21 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
土地转让协议书
2014/04/15 职场文书
十佳少年事迹材料
2014/12/25 职场文书
小学运动会开幕词
2015/01/28 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers