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 相关文章推荐
简单的编程0基础下Python入门指引
Apr 01 Python
python查看zip包中文件及大小的方法
Jul 09 Python
Python数组定义方法
Apr 13 Python
django实现用户登陆功能详解
Dec 11 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
django manage.py扩展自定义命令方法
May 27 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
在pycharm中无法import所安装的库解决方案
May 31 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
PHP 批量删除数据的方法分析
2009/10/30 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
javascript实现日期时间动态显示示例代码
2015/09/08 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
python xml解析实例详解
2016/11/14 Python
django框架如何集成celery进行开发
2017/05/24 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
餐厅考勤管理制度
2014/01/28 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
学校安全生产承诺书
2014/05/23 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
担保书范文
2015/01/20 职场文书
介绍信的写法
2015/01/31 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
公司员工培训管理制度
2015/08/04 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
Java基础-封装和继承
2021/07/02 Java/Android
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL