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中的浅拷贝和深拷贝
May 30 Python
基于Python 的进程管理工具supervisor使用指南
Sep 18 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
Python  Django 母版和继承解析
Aug 09 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
Python如何对齐字符串
Jul 30 Python
Python requests接口测试实现代码
Sep 08 Python
python3.8动态人脸识别的实现示例
Sep 21 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
datagrid框架的删除添加与修改
2013/04/08 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
Express的路由详解
2015/12/10 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
Python3写入文件常用方法实例分析
2015/05/22 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
ECHT官方网站:男女健身服
2020/02/14 全球购物
售后服务承诺书怎么写
2014/05/21 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
Python Django项目和应用的创建详解
2021/11/27 Python