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实现选择排序
Jun 04 Python
Python探索之Metaclass初步了解
Oct 28 Python
Python Socket使用实例
Dec 18 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
对python判断ip是否可达的实例详解
Jan 31 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
python批量修改交换机密码的示例
Sep 22 Python
Python中第三方库Faker的使用详解
Apr 02 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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
基于python socketserver框架全面解析
2017/09/21 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
九年级科学教学反思
2014/01/29 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
2015年招聘工作总结
2014/12/12 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
golang语言指针操作
2022/04/14 Golang
Elasticsearch 数据类型及管理
2022/04/19 Python