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 相关文章推荐
使用基于Python的Tornado框架的HTTP客户端的教程
Apr 24 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
python 日期操作类代码
May 05 Python
详解django.contirb.auth-认证
Jul 16 Python
pandas数据集的端到端处理
Feb 18 Python
自定义django admin model表单提交的例子
Aug 23 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 Python
python学习将数据写入文件并保存方法
Jun 07 Python
python爬虫用mongodb的理由
Jul 28 Python
浅谈Python数学建模之数据导入
Jun 23 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
收集的二十一个实用便利的PHP函数代码
2010/04/22 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
PHP基础知识介绍
2013/09/17 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
JS实现横向跑马灯效果代码
2020/04/20 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
快速入手Python字符编码
2016/08/03 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
python实现三次样条插值
2018/12/17 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
最新创业融资计划书
2014/01/19 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android
2022漫威和DC电影上映作品
2022/04/05 欧美动漫