def get_check_code_image(request):
"""
验证码
"""
im_name_list = ['validata_code1.jpg', 'validata_code2.jpg', 'validata_code3.jpg', 'validata_code4.jpg', \
'validata_code5.jpg', 'validata_code6.jpg', 'validata_code7.jpg', 'validata_code8.jpg']
im_path = os.path.join('medias','common_img')
im_name = os.path.join(im_path, im_name_list[random.randint(0, 7)])
im = Image.open(im_name)
draw = ImageDraw.Draw(im)
mp = md5.new()
mp_src = mp.update(str(datetime.now()))
mp_src = mp.hexdigest()
rand_str = mp_src[0:4]
draw.text((5,0), rand_str[0], font=ImageFont.truetype("ARIAL.TTF", random.randrange(15,35)))
draw.text((20,0), rand_str[1], font=ImageFont.truetype("ARIAL.TTF", random.randrange(15,35)))
draw.text((35,0), rand_str[2], font=ImageFont.truetype("ARIAL.TTF", random.randrange(15,35)))
draw.text((50,0), rand_str[3], font=ImageFont.truetype("ARIAL.TTF", random.randrange(15,35)))
del draw
request.session['identify_code'] = rand_str
buf = cStringIO.StringIO()
im.save(buf, 'png')
return HttpResponse(buf.getvalue(),'image/png')
从网上找了一些利用PIL生成图片验证码的例子。自己拿过来改改便用再项目上了。
有些东西自己还是没见过的,菜啊。多多学习。
draw = ImageDraw.Draw(im),自己最近学习PIL的简单用法时候没见过这个Draw,还不是太明白,不过猜想是在原始图片上添加文字或划什么东西要用到的。光做图片处理(模糊,翻转)什么的,没用到这个ImageDraw.
draw.text((50,0), rand_str[3], font=ImageFont.truetype("ARIAL.TTF", random.randrange(15,35)))
这个方法以前也没见过。看起来有点复杂,不过不愿意去查文档了,乱猜加试验,前面的第一个参数(50,0)只从相对图片的位置的x,y轴吧。 rand_str[3],要写的字符,最后一个应该是字体的属性和大小,字体的大小使用了一个随机值。
mp = md5.new()
mp_src = mp.update(str(datetime.now()))
mp_src = mp.hexdigest()
rand_str = mp_src[0:4]
MD5加密,其中update,hexdigest,方法内部咋实现,返回啥值,自己不明白,不过我想也不需要知道吧。就当它是一个函数,一个类型黑盒的函数,知道传一个数进出,返回给我一个值就行了。以后就找这个写就的了。
buf = cStringIO.StringIO()
Google了一下cStringIO和StringIO的区别,cStringIO效率高点。不过在某些情况cStringIO是只读的。两者具体用法基本相同。
im.save(buf, 'png')
return HttpResponse(buf.getvalue(),'image/png')
最后两句到现在没搞明白啥意思,
学习PIL的时候只遇到save(),的时候传递一个字符串位置,而此例这个buf可是一个二进制文件啊。TODO吧,实在不明白。
最后一句return HttpResponse(buf.getvalue(),'image/png')意思是传递一个图片对象,但模板中取的值又是这个图片的URL,还是搞不太明白。
模板中使用此验证码
<html>
<h1>test</h1>
<img onclick="this.setAttribute('src','/accounts/get_check_code_image/?nocache='+Math.random());"
src="/accounts/get_check_code_image/" alt="验证码图片" />
</html>
自己真是啥也不懂,不明白后面的地址跟个nocache参数做啥子,Google,好不容易Google到答案,原来是GET请求后面如果不带参数的话,会使用缓存,而后面跟个随机的参数便不会用缓存了。
this.setAttribute 方法设置参数属性,没次点击src的属性便更改,这样便就实现了动态的验证码。
分享到:
相关推荐
图片验证码的资源包
在django中生成英文单词验证码,提供验证码图片生成,检查验证码等功能 原用于pythoner.net的验证码,现整理出来打包发布到pypi. 新特性 新增数字验证码模式 字体尺寸根据图片长宽自适应 Usage Install pip...
基于python+django的登录网站验证码的生成与识别系统的实现.zip 用python实现登录网站验证码功能: 设计两种验证码: 1 图形验证码,用python web框架Django能够实现动态刷新。 2 滑动验证码: 1.服务端随机生成小...
本资源提供的是一个django框架下的网站验证码技术,通过python代码调用PIL库生成图形验证码然后通过json方式将验证码字段和图片通过base64格式传输给前端,前端可以点击更换验证码(不用刷新页面),对输入进行校验...
登录网站验证码的生成与识别系统是一个使用Python和Django框架开发的项目,旨在为网站提供安全的用户验证过程。该系统主要包括两个部分:一是服务器端用于生成验证码图片的逻辑,二是客户端(通常包括后端处理和前端...
使用Python的pillow模块 random 模块随机生成验证码图片,并应用到Django项目中 安装pillow $ pip3 install pillow 生成验证码图片 \vericode.py from PIL import Image,ImageDraw,ImageFont,ImageFilter import...
行为式的验证码通常采用图片识别或者滑块游戏的方式来实现,这种验证方式不需要用户端的数据录入只需要鼠标的点击就可以实现,目前行为式的验证码更能够被用户所接受。 此次针对登录网站验证码的生成和识别主要利用...
1.服务端随机生成小拼块和带有抠图缺口的背景图片,并保存随机抠图位置坐标; 2.前端实现滑动交互,将小拼块拖到缺口上还原完整图,记录到用户拖动距离值; 3.前端将用户拖动距离值传入服务端,服务端校验误差是否在...
关于django的验证码的使用,在网上找到了相关的资料,现在整理一下分享给大家,下面这篇文章主要给大家介绍了关于Django验证码的生成与使用的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
用户登录期间,随机图片验证码验证,登录账号的Cookie,Session保存。在增删删改期间,实现了 Ajax 页面无刷新上传数据。 在浏览数据信息方面,实现了模块级别的分页查询,实现了 e-chart 的数据可视化。在存储数据...
基于PIL生成一个带验证码的图片和验证码,生成验证码图片需要Monaco.ttf字体(重要),可按自己要求更改check_code中的字体和字体文件位置 #!/usr/bin/env python # -*- coding:utf-8 -*- import random from PIL ...
用户登录期间,随机图片验证码验证,登录账号的Cookie,Session保存。在增删删改期间,实现了 Ajax 页面无刷新上传数据。 在浏览数据信息方面,实现了模块级别的分页查询,实现了 e-chart 的数据可视化。在存储数据...
此次设计的图像验证码的登录界面展示如下,在验证码的验证中是以图片作为验证的方式,拖动图块至正确的位置来进行验证,图像验证码的登录首页展示如下: 图5.3新增二维码界面 5.4图像验证码拖动错误界面 当没有...
该项目是使用django+bootstrp开发的项目,包含以下功能 + 注册: 手机获取验证码、ModelForm数据验证、验证码redis超时处理, + 登录:手机验证码登录、账号密码登录、生成随机图片验证码、用户信息seesion处理
本项目是使用最新的python3.6.1版本编写的在网站后台生成验证码图片的插件,该插件源码位于项目中app01/tools/CheckCode.py文件内,从头至尾均做了注释。为了便于展示效果,使用Django框架写了一个web(一切从简,未...
1. 注册、登录、手机短信、图片验证码、redis超时 等企业用户认证。 2. git版本控制、local_settings配置管理、virtualenv虚拟环境。 3. ModelForm扩展核心应用 & 自定义widget插件 & OOP多继承实现BootStrap应用。 ...
图片验证码 KindEditor基本使用和文件操作 作业 第25周 今日内容概要 博客系统示例预览 组合搜索组件 JSONP跨域请求jQuery方式 JSONP跨域请求本质 XSS过滤以及单例模式 博客系统表结构讲解 博客系统功能讲解 CMDB...
1. 注册、登录、手机短信、图片验证码、redis超时 等企业用户认证。 2. git版本控制、local_settings配置管理、virtualenv虚拟环境。 3. ModelForm扩展核心应用 & 自定义widget插件 & OOP多继承实现BootStrap应用。 ...
1. 注册、登录、手机短信、图片验证码、redis超时 等企业用户认证。 2. git版本控制、local_settings配置管理、virtualenv虚拟环境。 3. ModelForm扩展核心应用 & 自定义widget插件 & OOP多继承实现BootStrap应用。 ...