django随机验证码
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 = ( 120 , 30 ), color = ( 255 , 255 , 255 )) # 在图片查看器中打开 # img.show() # 保存在本地 with open ( 'code.png' , 'wb' ) as f: img.save(f, format = 'png' ) |
2. 创建画笔,用于在图片上画任意内容
1
2
|
img = Image.new(mode = 'RGB' , size = ( 120 , 30 ), color = ( 255 , 255 , 255 )) draw = ImageDraw.Draw(img, mode = 'RGB' ) |
3. 画点
1
2
3
4
5
6
|
img = Image.new(mode = 'RGB' , size = ( 120 , 30 ), color = ( 255 , 255 , 255 )) draw = ImageDraw.Draw(img, mode = 'RGB' ) # 第一个参数:表示坐标 # 第二个参数:表示颜色 draw.point([ 100 , 100 ], fill = "red" ) draw.point([ 300 , 300 ], fill = ( 255 , 255 , 255 )) |
4. 画线
1
2
3
4
5
6
|
img = Image.new(mode = 'RGB' , size = ( 120 , 30 ), color = ( 255 , 255 , 255 )) draw = ImageDraw.Draw(img, mode = 'RGB' ) # 第一个参数:表示起始坐标和结束坐标 # 第二个参数:表示颜色 draw.line(( 100 , 100 , 100 , 300 ), fill = 'red' ) draw.line(( 100 , 100 , 300 , 100 ), fill = ( 255 , 255 , 255 )) |
5. 画圆
1
2
3
4
5
6
7
|
img = Image.new(mode = 'RGB' , size = ( 120 , 30 ), color = ( 255 , 255 , 255 )) 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 = ( 120 , 30 ), color = ( 255 , 255 , 255 )) 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 = ( 120 , 30 ), color = ( 255 , 255 , 255 )) draw = ImageDraw.Draw(img, mode = 'RGB' ) # 第一个参数:表示字体文件路径 # 第二个参数:表示字体大小 font = ImageFont.truetype( "kumo.ttf" , 28 ) # 第一个参数:表示起始坐标 # 第二个参数:表示写入内容 # 第三个参数:表示颜色 # 第四个参数:表示颜色 draw.text([ 0 , 0 ], '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随机验证码的更多相关文章
- Django之路 - 实现登录随机验证码
登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验 ...
- python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)
一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...
- Django随机生成验证码图片
PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...
- Django中生成随机验证码(pillow模块的使用)
Django中生成随机验证码 1.html中a标签的设置 <img src="/get_validcode_img/" alt=""> 2.view ...
- Django之实现登录随机验证码
登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验 ...
- Django框架登录验证及产生随机验证码的实例
1:views视图代码 # 登录验证 def login(request): # 使用ajax请求可以使用判断 # if request.is_ajax(): if request.method == ...
- python模块之PIL模块(生成随机验证码图片)
PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...
- django生成验证码
django生成验证码 # 制作验证码 def verify_code(): # 1,定义变量,用于画面的背景色.宽.高 # random.randrange(20, 100)意思是在20到100之间 ...
- 7月2日 Django 生成验证码、
html页面里 {# 验证码 #} <div class="form-group " id="v-code-wrapper"> <label ...
随机推荐
- mybatis分页查询
方式1: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返回后n条记录.无疑该查询能够实现分页功能,但是如果m的 ...
- Vim技能修炼教程(15) - 时间和日期相关函数
Vimscript武器库 前面我们走马观花地将Vimscript的大致语法过了一遍.下面我们开始深入看一下Vimscript都给我们准备了哪些武器.如果只用这些武器就够了,那么就太好了,只用Vimsc ...
- java中高级面试题整理及参考答案
面试问题: 一.Java基础方面: 1.Java面相对象的思想的理解(主要是多态): http://blog.csdn.net/zhaojw_420/article/details/70477636 ...
- JavaScript动态加载js文件
/********************************************************************* * JavaScript动态加载js文件 * 说明: * ...
- JAVA多线程----用--死锁
(1) 互斥条件:一个资源每次只能被一个进程使用.(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放.(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺.(4) ...
- BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】
BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...
- python(七):元类与抽象基类
一.实例创建 在创建实例时,调用__new__方法和__init__方法,这两个方法在没有定义时,是自动调用了object来实现的.python3默认创建的类是继承了object. class A(o ...
- js 时间date格式化
js中没有类似java中的DateFormat类来处理日期格式化,可以自己写一个: var newDate=new Date(); var year=newDate.getFullYear(); va ...
- [BZOJ2115][WC2011]最大XOR和路径
bzoj luogu sol 首先很显然的,答案等于1到n的任意一条路径的异或和与若干个环的异或和的异或和. 因为图是联通的,那么就可以从一个点走到任意一个想要走到的环上,走完这个环后原路返回,那么中 ...
- SpringMvc的上传和下载
第一步:配置文件加入上传和下载的<bean>全部配置文件参考上上篇博文 <!-- 配置springMVC上传文件和下载文件 --> <bean id="mult ...