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 splitlines使用技巧
Sep 06 Python
python实现telnet客户端的方法
Apr 15 Python
Python内建数据结构详解
Feb 03 Python
Python实现PS图像抽象画风效果的方法
Jan 23 Python
python字符串的方法与操作大全
Jan 30 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
Python2和Python3的共存和切换使用
Apr 12 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
详解Python设计模式之策略模式
Jun 15 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 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/08 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
Python实现针对中文排序的方法
2017/05/09 Python
scrapy爬虫实例分享
2017/12/28 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
服装厂厂长岗位职责
2013/12/27 职场文书
物流合作计划书
2014/01/10 职场文书
单位委托书范本
2014/04/04 职场文书
人事专员岗位说明书
2014/07/29 职场文书
民主评议党员个人总结
2015/02/13 职场文书
业务员辞职信范文
2015/03/02 职场文书
初三毕业感言
2015/07/31 职场文书
2016寒假假期总结
2015/10/10 职场文书
严以用权学习心得体会
2016/01/12 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书