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同时兼容python2和python3的8个技巧分享
Jul 11 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python环境变量设置方法
Aug 28 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
浅谈python 中类属性共享的问题
Jul 02 Python
利用python开发app实战的方法
Jul 09 Python
Django 数据库同步操作技巧详解
Jul 19 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
Django ModelForm组件使用方法详解
Jul 23 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
Python更换pip源方法过程解析
May 19 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 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
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
基于jquery & json的省市区联动代码
2012/06/26 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
Python 中 Meta Classes详解
2016/02/13 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
提升python处理速度原理及方法实例
2019/12/25 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
中文教师求职信
2014/02/22 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis