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通过apply使用元祖和列表调用函数实例
May 26 Python
python实现随机梯度下降(SGD)
Mar 24 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
python3实现微型的web服务器
Sep 03 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
深入了解Python 变量作用域
Jul 24 Python
Django实现随机图形验证码的示例
Oct 15 Python
python字典按照value排序方法
Dec 28 Python
Python进度条的使用
May 17 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
js右键菜单效果代码
2007/07/21 Javascript
javascript引用对象的方法代码
2007/08/13 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python学习入门细节知识点
2018/03/29 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
Java的五个基础面试题
2016/02/26 面试题
GC是什么?为什么要有GC?
2013/12/08 面试题
实习生自我鉴定
2013/12/12 职场文书
联欢晚会主持词
2014/03/25 职场文书
抢劫罪辩护词
2015/05/21 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL