python3 pillow生成简单验证码图片的示例


Posted in Python onSeptember 19, 2017

使用Python的pillow模块 random 模块随机生成验证码图片,并应用到Django项目中

安装pillow

$ pip3 install pillow

生成验证码图片

\vericode.py

from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random

 #随机码 默认长度=1
def random_code(lenght=1):  
  code = ''
  for char in range(lenght):
    code += chr(random.randint(65,90))
  return code

 #随机颜色 默认颜色范围【1,255】
def random_color(s=1,e=255):
  return (random.randint(s,e),random.randint(s,e),random.randint(s,e))

 #生成验证码图片
 #length 验证码长度
 #width 图片宽度
 #height 图片高度
 #返回验证码和图片
def veri_code(lenght=4,width=160,height=40):
  #创建Image对象
  image = Image.new('RGB',(width,height),(255,255,255))
  #创建Font对象
  font = ImageFont.truetype('Arial.ttf',32)
  #创建Draw对象
  draw = ImageDraw.Draw(image)
  #随机颜色填充每个像素
  for x in range(width):
    for y in range(height):
      draw.point((x,y),fill=random_color(64,255))
  #验证码
  code = random_code(lenght)
  #随机颜色验证码写到图片上
  for t in range(lenght):
    draw.text((40*t+5,5),code[t],font=font,fill=random_color(32,127))
  #模糊滤镜
  image = image.filter(ImageFilter.BLUR)
  return code,image

应用

编写Django应用下的视图函数

\views.py

from . import vericode.py
from io import BytesIO
from django.http import HttpResponse

def verify_code(request):
  f = BytesIO()
  code,image = vericode.veri_code()
  image.save(f,'jpeg')
  request.session['vericode'] = code
  return HttpResponse(f.getvalue())

def submit_xxx(request):
  if request.method == "POST":
    vericode = request.session.get("vericode").upper()
    submitcode = request.POST.get("vericode").upper()
    if submitcode == vericode:
      return HttpResponse('ok')
  return HttpResponse('error')

这里使用了Django的session,需要在Django settings.py的INSTALLED_APPS中添加'django.contrib.sessions'(默认添加)
verify_code视图函数将验证码添加到session中和验证码图片一起发送给浏览器,当提交表单到submit_xxx()时,先从session中获取验证码,再对比从表单中的输入的验证码。

这里只是简单说明,url配置和前端代码未给出。

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

Python 相关文章推荐
python为tornado添加recaptcha验证码功能
Feb 26 Python
Python字符串详细介绍
May 09 Python
深入解析Python编程中JSON模块的使用
Oct 15 Python
Python 3中print函数的使用方法总结
Aug 08 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
python manage.py runserver流程解析
Nov 08 Python
python 实现多维数组(array)排序
Feb 28 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
Python办公自动化PPT批量转换操作
Sep 15 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 #Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 #Python
python基本语法练习实例
Sep 19 #Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 #Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 #Python
Python 文件操作的详解及实例
Sep 18 #Python
python Socket之客户端和服务端握手详解
Sep 18 #Python
You might like
Smarty模板常见的简单应用分析
2016/11/15 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
用python读写excel的方法
2014/11/18 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python实现关键词提取的示例讲解
2018/04/28 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
python实现ip代理池功能示例
2019/07/05 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
python使用列表的最佳方案
2020/08/12 Python
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
美发活动策划书
2014/01/14 职场文书
考试退步检讨书
2014/01/15 职场文书
行政人事岗位职责
2014/03/17 职场文书
入职担保书范文
2014/05/21 职场文书
财务工作个人总结
2015/02/27 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS