django-web开发使用图片验证码
来源:互联网 发布:如何恢复u盘数据 编辑:程序博客网 时间:2024/05/31 20:51
一、单独封装一个工具类用来生成图片验证码
import random # 随机数import string # 字符的# 引入绘图的包from PIL import Image,ImageDraw,ImageFont,ImageFile# 引入缓存的包from django.core.cache import cache# 定义验证码的类class Captcha(object): # 选用的字体的路径 font_path = 'verdana.ttf' # 生成几位数的验证码 number = 4 # 生成验证码图片的宽度与高度 size = (100,30) # 背景颜色,默认是白色 bgcolor = (255,255,255) # 字体颜色,默认为蓝色 fontcolor = (random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)) # 验证码字体大小 fontsize = 25 # 干扰线的颜色,默认是红色 linecolor = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) # 是否要加入干扰线 draw_line = True # 是否绘制干扰点 draw_point = True # 加入干扰线的条数 line_number = 2 # 定义一个类方法 # 用来随机生成一个字符串(包括英文和数字) @classmethod def __gene_text(cls): source = list(string.letters) for index in range(0,10): source.append(str(index)) # 随机获取几位数字拼接 return ''.join(random.sample(source,cls.number)) # 定义一个类方法绘制干扰线 @classmethod def __gene_line(cls,draw,width,height): # 开始位置 begin = (random.randint(0,width),random.randint(0,height)) # 结束位置 end = (random.randint(0,width),random.randint(0,height)) draw.line([begin, end], fill=cls.linecolor) # 定义一个类方法绘制干扰点 @classmethod def __gene_points(cls,draw,point_chance,width,height): chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100] for w in xrange(width): for h in xrange(height): tmp = random.randint(0, 100) if tmp > 100 - chance: draw.point((w, h), fill=(0, 0, 0)) # 生成验证码 @classmethod def gene_code(cls): width, height = cls.size # 宽和高 image = Image.new('RGBA', (width, height), cls.bgcolor) # 创建图片 font = ImageFont.truetype(cls.font_path, cls.fontsize) # 验证码的字体 draw = ImageDraw.Draw(image) # 创建画笔 text = cls.__gene_text() # 生成字符串 font_width, font_height = font.getsize(text) draw.text(((width - font_width) / 2, (height - font_height) / 2), text, font=font, fill=cls.fontcolor) # 填充字符串 # 如果需要绘制干扰线 if cls.draw_line: # 遍历line_number次,就是画line_number根线条 for x in xrange(0, cls.line_number): cls.__gene_line(draw, width, height) # 如果需要绘制噪点 if cls.draw_point: cls.__gene_points(draw, 10, width, height) # 保存到缓存中,过期时间为2分钟 cache.set(text.lower(), text.lower(), 120) return (text, image) # 验证验证码 @classmethod def check_captcha(cls, captcha): captcha_cache = cache.get(captcha) if captcha_cache and captcha_cache == captcha: # 删除缓存 cache.delete(captcha) return True else: return False
二、在settings.py
中配置使用的缓存
# 配置本地缓存CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '127.0.0.1:11211', ] }}
三、开启本地的memcached
缓存
1、如果没安装的
memcached -d install
2、启动
memcached -d start
阅读全文
0 0
- django-web开发使用图片验证码
- django-web开发使用七牛云上传图片
- 开发基于Web Service的图片验证码服务
- 开发基于Web Service的图片验证码服务
- 使用 Django 和 Python 开发 Web 站点
- 使用Django进行快速Web应用开发
- [Python] 使用Django开发Web框架
- 使用django开发一个web项目初试
- 使用 Django 和 Python 开发 Web 站点
- 使用 Django 和 Python 开发 Web 站点
- 使用 Django 和 Python 开发 Web 站点
- Java Web:使用Servlet生成网页随机图片验证码
- java Web图片验证码
- java Web图片验证码
- Django(九)下:Ajax操作、图片验证码、KindEditor使用
- Web 使用验证码
- django - 验证码 django-simple-captcha 使用简介
- Django 验证码的使用 -django-simple-captcha使用方法
- django项目开发模拟auth的做一个登录验证(二)
- JAVA包装类及其拆箱装箱及Integer类拆装箱的细节
- 现代操作系统之多处理机系统(中)
- 策略模式
- 回文树 学习小记
- django-web开发使用图片验证码
- oracle时间函数
- 在springboot项目中配置跨域
- JavaScript学习-面向对象与原型1
- bzoj1834 [ZJOI2010]network 网络扩容(最大流+费用流)
- 线程与进程
- centos7安装wps
- 读书笔记——深入理解JAVA虚拟机(3)
- 【树链剖分】【UR #4】UOJ53 追击圣诞老人