python django 实现验证码的功能实例代码


Posted in Python onMay 18, 2017

我也是刚学Python  Django不久很多都不懂,所以我现在想一边学习一边记录下来然后大家一起讨论!

验证码功能一开始我在网上找了很多的demo但是我在模仿他们写的时候,发现在我的版本上根本就不能运行起来在前端页面显示的时候是图裂,有可能是我用的Python3.5的版本和django是1.10的版本的原因,我看了晚上很多的版本都是2.7的,所以我问了很多前辈和大神,终于发现了原因的所在,好了代码我就在下面帖粗来了。

这是我的项目目录。

python django 实现验证码的功能实例代码

验证码要成功显示就必须要有一个验证码生成器,所以就要写一个验证码生成器。我在app中新建了一个py文件check_coed.py文件,这就是验证码生成器。代码如下

import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter

_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
init_chars = ''.join((_letter_cases, _upper_cases, _numbers))

def create_validate_code(size=(120, 30),
       chars=init_chars,
       img_type="GIF",
       mode="RGB",
       bg_color=(255, 255, 255),
       fg_color=(0, 0, 255),
       font_size=18,
       font_type="Monaco.ttf",
       length=4,
       draw_lines=True,
       n_line=(1, 2),
       draw_points=True,
       point_chance=2):
 """
 @todo: 生成验证码图片
 @param size: 图片的大小,格式(宽,高),默认为(120, 30)
 @param chars: 允许的字符集合,格式字符串
 @param img_type: 图片保存的格式,默认为GIF,可选的为GIF,JPEG,TIFF,PNG
 @param mode: 图片模式,默认为RGB
 @param bg_color: 背景颜色,默认为白色
 @param fg_color: 前景色,验证码字符颜色,默认为蓝色#0000FF
 @param font_size: 验证码字体大小
 @param font_type: 验证码字体,默认为 ae_AlArabiya.ttf
 @param length: 验证码字符个数
 @param draw_lines: 是否划干扰线
 @param n_lines: 干扰线的条数范围,格式元组,默认为(1, 2),只有draw_lines为True时有效
 @param draw_points: 是否画干扰点
 @param point_chance: 干扰点出现的概率,大小范围[0, 100]
 @return: [0]: PIL Image实例
 @return: [1]: 验证码图片中的字符串
 """

 width, height = size # 宽高
 # 创建图形
 img = Image.new(mode, size, bg_color)
 draw = ImageDraw.Draw(img) # 创建画笔

 def get_chars():
  """生成给定长度的字符串,返回列表格式"""
  return random.sample(chars, length)

 def create_lines():
  """绘制干扰线"""
  line_num = random.randint(*n_line) # 干扰线条数

  for i in range(line_num):
   # 起始点
   begin = (random.randint(0, size[0]), random.randint(0, size[1]))
   # 结束点
   end = (random.randint(0, size[0]), random.randint(0, size[1]))
   draw.line([begin, end], fill=(0, 0, 0))

 def create_points():
  """绘制干扰点"""
  chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100]

  for w in range(width):
   for h in range(height):
    tmp = random.randint(0, 100)
    if tmp > 100 - chance:
     draw.point((w, h), fill=(0, 0, 0))

 def create_strs():
  """绘制验证码字符"""
  c_chars = get_chars()
  strs = ' %s ' % ' '.join(c_chars) # 每个字符前后以空格隔开

  # font = ImageFont.truetype(font_type, font_size)
  font = ImageFont.load_default().font
  font_width, font_height = font.getsize(strs)

  draw.text(((width - font_width) / 3, (height - font_height) / 3),
     strs, font=font, fill=fg_color)

  return ''.join(c_chars)

 if draw_lines:
  create_lines()
 if draw_points:
  create_points()
 strs = create_strs()

 # 图形扭曲参数
params = [1 - float(random.randint(1, 2)) / 100,0, 0, 0,1 - float(random.randint(1, 10)) / 100,float(random.randint(1, 2)) / 500, 0.001,float(random.randint(1, 2)) / 500] 
img = img.transform(size, Image.PERSPECTIVE, params) # 创建扭曲 
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强(阈值更大)

在html前端中

python django 实现验证码的功能实例代码

前端中最后几句可以不加但是为了正规一点 还是加 一下吧  这样就可以刷新验证码

大概的工程就到这差不多完成了  但是还差一点就是还缺少一个字体的文件,这样才能随意的调大调小字体和设置字体。这个还网上可以下载到 就不贴出来了,文件名是

python django 实现验证码的功能实例代码

好了现在全部完成了。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
简单实现python数独游戏
Mar 30 Python
python实现微信自动回复及批量添加好友功能
Jul 03 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
python excel转换csv代码实例
Aug 26 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
Python如何发送与接收大型数组
Aug 07 Python
python实现发送邮件及附件功能
Mar 02 #Python
利用python微信库itchat实现微信自动回复功能
May 18 #Python
利用Python读取文件的四种不同方法比对
May 18 #Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 #Python
Python使用time模块实现指定时间触发器示例
May 18 #Python
Python实现的文本简单可逆加密算法示例
May 18 #Python
Python操作MongoDB详解及实例
May 18 #Python
You might like
在WIN98下以apache模块方式安装php
2006/10/09 PHP
用Php实现链结人气统计
2006/10/09 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
AngularJS快速入门
2015/04/02 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
python 装饰器的基本使用
2021/01/13 Python
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
民族团结先进集体事迹材料
2014/05/22 职场文书
工作作风承诺书
2014/08/30 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
务虚会发言材料
2014/12/25 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
工作自我推荐信范文
2015/03/25 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python