Python生成随机验证码,需要使用PIL模块.

安装:

1
python3.5 -m pip install pillow

基本使用

1. 创建图片

1
2
3
4
5
6
7
8
9
from PIL import Image
img = Image.new(mode='RGB', size=(12030), color=(255255255))
  
# 在图片查看器中打开
# img.show()
  
# 保存在本地
with open('code.png','wb') as f:
    img.save(f,format='png')

2. 创建画笔,用于在图片上画任意内容

1
2
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')

3. 画点

1
2
3
4
5
6
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示坐标
# 第二个参数:表示颜色
draw.point([100100], fill="red")
draw.point([300300], fill=(255255255))

4. 画线

1
2
3
4
5
6
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标和结束坐标
# 第二个参数:表示颜色
draw.line((100,100,100,300), fill='red')
draw.line((100,100,300,100), fill=(255255255))

5. 画圆

1
2
3
4
5
6
7
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标和结束坐标(圆要画在其中间)
# 第二个参数:表示开始角度
# 第三个参数:表示结束角度
# 第四个参数:表示颜色
draw.arc((100,100,300,300),0,90,fill="red")

6. 写文本

1
2
3
4
5
6
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标
# 第二个参数:表示写入内容
# 第三个参数:表示颜色
draw.text([0,0],'python',"red")

7. 特殊字体文字

1
2
3
4
5
6
7
8
9
10
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示字体文件路径
# 第二个参数:表示字体大小
font = ImageFont.truetype("kumo.ttf"28)
# 第一个参数:表示起始坐标
# 第二个参数:表示写入内容
# 第三个参数:表示颜色
# 第四个参数:表示颜色
draw.text([00], 'python'"red", font=font)

图片验证码实例

路由URL
url(r'^get_valid_img/$', views.get_valid_img),
def get_valid_img(request):
'''
验证码获取
:param request:
:return:
'''
# 第一种方法,通过本地图片,传送返回
'''
import os
from Blogsys import settings
path = os.path.join(settings.BASE_DIR,'app01','static','img','default.png')
# 打开这个图片,用二进制读出来返回给IMAGE的SRC
f = open(path,'rb')
data = f.read()
return HttpResponse(data)

第一种固定图片

 # 第二钟方法,通过PIL模块创建这个图片
from PIL import Image
import random
# 获取背景颜色
def get_random_color():
return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
# 生成图片,第一个参数是模式,第二个是大小,第三个是背景色
image = Image.new(mode='RGB',size=(260,40),color=get_random_color()) # 创建一个有背景颜色的图片
f = open('default.png','wb') # 二进制打开一个本地文件
image.save(f,'png') # 将这个图片存放进去,第一个参数是本地文件的句柄,第二个参数是文件最后格式
# 读取图片,返回给IMAGE的SRC
with open('default.png','rb') as f_read:
data = f_read.read() # 第三种方法与第二种方法一样,只不过存出在内存
# from PIL import Image
# import random
# from io import BytesIO
# # 获取背景颜色
# def get_random_color():
# return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
#
# # 生成图片,第一个参数是模式,第二个是大小,第三个是背景色
# image = Image.new(mode='RGB', size=(260, 40), color=get_random_color()) # 创建一个有背景颜色的图片
# f = BytesIO() # 打开内存空间
# image.save(f, 'png') # 将这个图片存放进去,第一个参数是本地文件的句柄,第二个参数是文件最后格式
# data = f.getvalue() # 读取图片,返回给IMAGE的SRC,获取IO里面对象
# return HttpResponse(data) # 第四种方法,通过PIL模块,画板,画笔
from PIL import Image, ImageDraw, ImageFont
import random
from io import BytesIO if request.is_ajax() or request.method=='GET':def get_random_color():
'''
随机颜色函数
:return:
'''
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) def get_random_char():
'''
随机验证码函数
:return:
'''
random_num = str(random.randint(0, 9))
random_upper_alph = chr(random.randint(65, 90))
random_lower_alph = chr(random.randint(97, 122))
random_char = random.choice([random_num, random_lower_alph, random_upper_alph])
return random_char
image = Image.new(mode="RGB", size=(260, 40), color=get_random_color()) # 创建图片
draw = ImageDraw.Draw(image, mode='RGB') # 将图片弄成画板,要有图片,模式
font = ImageFont.truetype("app01/static/kumo.ttf", 32) # 创建个画笔,要有字体,大小
valid_code_str = "" # 随机验证码变量
for i in range(1, 6):
char = get_random_char() # 执行随机验证码函数
valid_code_str += char # 添加到随机验证码的变量
# 画板内容,X,Y,TEXT,COLOR,FONT
draw.text([i * 40, 5], char, get_random_color(), font=font)
print('我是验证码',valid_code_str)
# 噪点设计,比如点点,圈圈,横线 # width = 260
# height = 40
# for i in range(80): # 创建80个点点,五颜六色的点
# draw.point((random.randint(0,width),random.randint(0,height)),fill=get_random_color())
#
# for i in range(10):
# x1 = random.randint(0,width) # 创建十条线,五颜六色的线
# x2 = random.randint(0,width)
# y1 = random.randint(0,height)
# y2 = random.randint(0,height)
# draw.line((x1,y1,x2,y2),fill=get_random_color()) # for i in range(40): # 创建40个圈圈,但不是很理想,感觉跟点点差不多
# draw.point([random.randint(0,width),random.randint(0,height)],fill=get_random_color())
# x = random.randint(0,width)
# y = random.randint(0,height)
# draw.arc((x,y,x+90,y+90),0,90,fill=get_random_color()) # 通过这里控制坐标 f = BytesIO() # 打开内存空间
image.save(f,'png') # 保存到内存空间
data = f.getvalue() # 取出验证码,图片,样式返回 # 验证码生成了,这时候需要放在session里面,然后通过AJAX提交,后台判断是否匹配成功
request.session['valid_code_str'] = valid_code_str
return HttpResponse(data)
  <div class="col-md-6">{# src可以跟一个图片源,我们要通过模块来创建,也会走/get_valid_img/#}
<img src="/get_valid_img/" alt="验证码" id="valid_img" height="" width="">
</div>
 {#    方式一,刷新验证码,通过/get_valid_img/后面加入?刷新,不需要试图函数更改#} 随机验证码刷新
$("#valid_img").click(function () {
$(this)[0].src += "?"
});
如果需要验证码的验证,在views里面的验证码放在session里面,html里面记录用户输入验证码,再通过forms里钩子比对

django随机验证码的更多相关文章

  1. Django之路 - 实现登录随机验证码

    登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验 ...

  2. python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)

    一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...

  3. Django随机生成验证码图片

    PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...

  4. Django中生成随机验证码(pillow模块的使用)

    Django中生成随机验证码 1.html中a标签的设置 <img src="/get_validcode_img/" alt=""> 2.view ...

  5. Django之实现登录随机验证码

    登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验 ...

  6. Django框架登录验证及产生随机验证码的实例

    1:views视图代码 # 登录验证 def login(request): # 使用ajax请求可以使用判断 # if request.is_ajax(): if request.method == ...

  7. python模块之PIL模块(生成随机验证码图片)

    PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...

  8. django生成验证码

    django生成验证码 # 制作验证码 def verify_code(): # 1,定义变量,用于画面的背景色.宽.高 # random.randrange(20, 100)意思是在20到100之间 ...

  9. 7月2日 Django 生成验证码、

    html页面里 {# 验证码 #} <div class="form-group " id="v-code-wrapper"> <label ...

随机推荐

  1. 2018-2019 2 20165210 《网络对抗技术》Exp5 MSF基础

    2018-2019 2 20165210 <网络对抗技术>Exp5 MSF基础 实验内容: 一个主动攻击实践,如ms08_067(成功); 一个针对浏览器的攻击,如ms10_046(成功) ...

  2. EasyCMS在幼儿园视频直播项目实战中以redis操作池的方式应对高并发的redis操作问题

    在之前的博客< EasyDarwin幼教云视频平台在幼教平台领域大放异彩!>中我们也介绍到,EasyCMS+EasyDarwin+redis形成的EasyDarwin云平台方案,在幼教平台 ...

  3. Shell 单行注释和多行注释

  4. Emgu cv 学习笔记

    http://www.cnblogs.com/CoverCat/p/5003363.html emgu中imagebox与picturebox imagebox 是emgu   设置好厚,新出现的控件 ...

  5. BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*

    BZOJ4152 AMPPZ2014 The Captain Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点 ...

  6. 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference

    在前段时间我写了一篇迁移 csproj 格式的博客 将 WPF.UWP 以及其他各种类型的旧样式的 csproj 文件迁移成新样式的 csproj 文件,不过全过程是手工进行的,而且到最后处理 XAM ...

  7. web安全知识

    参考文章 :  https://www.mudoom.com/php%E5%AE%89%E5%85%A8%E7%BC%96%E7%A0%81/ SQL注入 造成sql注入的原因是因为程序没有过滤用户输 ...

  8. vector 介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  9. 《selenium2 python 自动化测试实战》(9)——切换窗口

    有时候我们点击按钮后页面会跳转到新的窗口,我们需要到新的窗口中去进行接下来的操作,这时候就需要切换窗口的操作,我们根据句柄(handle)来操作窗口之间的切换,看代码: # coding: utf-8 ...

  10. Python 实现汉诺塔问题(递归)

    有三根柱子一次为A,B,C 现在A柱子上有3个块,按照汉诺塔规则移动到C柱子上去,打印步骤? 我们这样理解:A为原始柱,C为目标柱,B为缓冲柱 1.定义一个函数move(n,a,b,c),n为原始柱上 ...