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 条件判断的缩写方法
Sep 06 Python
Python使用Scrapy爬取妹子图
May 28 Python
python查看zip包中文件及大小的方法
Jul 09 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
Python统计分析模块statistics用法示例
Sep 06 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
matplotlib 三维图表绘制方法简介
Sep 20 Python
python 实现端口扫描工具
Dec 18 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 Python
Django后端按照日期查询的方法教程
Feb 28 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 冒泡排序 交换排序法
2011/05/10 PHP
destoon各类调用汇总
2014/06/20 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
Extjs 几个方法的讨论
2010/01/28 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
django实现分页的方法
2015/05/26 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
期中考试反思800字
2014/05/01 职场文书
2014年环保工作总结
2014/11/26 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
《绝招》教学反思
2016/02/20 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers