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 相关文章推荐
Web服务器框架 Tornado简介
Jul 16 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
Python使用爬虫猜密码
Feb 19 Python
解决python爬虫中有中文的url问题
May 11 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
python中把元组转换为namedtuple方法
Dec 09 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 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 八种基本的数据类型小结
2011/06/01 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
Jquery replace 字符替换实现代码
2010/12/02 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
搭建vue开发环境
2018/07/19 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
PHPStorm中如何对nodejs项目进行单元测试详解
2019/02/28 NodeJs
详解vue 图片上传功能
2019/04/30 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
python抓取百度首页的方法
2015/05/19 Python
解决python报错MemoryError的问题
2018/06/26 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
计算机开发个人求职信范文
2013/09/26 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
自考生自我评价
2019/06/21 职场文书
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js