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 04 Python
python实现html转ubb代码(html2ubb)
Jul 03 Python
跟老齐学Python之字典,你还记得吗?
Sep 20 Python
Python使用Flask框架同时上传多个文件的方法
Mar 21 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
python版学生管理系统
Jan 10 Python
Python socket套接字实现C/S模式远程命令执行功能案例
Jul 06 Python
wxPython实现整点报时
Nov 18 Python
Python selenium爬取微博数据代码实例
May 22 Python
如何利用python生成MD5并去重
Dec 07 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/04 冲泡冲煮
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
3种vue路由传参的基本模式
2018/02/22 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
毕业生自荐信的主要内容
2013/10/29 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
个人综合鉴定材料
2014/05/23 职场文书
2015年化验员工作总结
2015/04/10 职场文书
夏洛特的网观后感
2015/06/15 职场文书
欠条样本
2015/07/03 职场文书
新学期主题班会
2015/08/17 职场文书
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers