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通过imaplib模块读取gmail里邮件的方法
May 08 Python
python编程实现希尔排序
Apr 13 Python
Python模块的加载讲解
Jan 15 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
python实现列表的排序方法分享
Jul 01 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
python+OpenCV实现图像拼接
Mar 05 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
python中字符串的编码与解码详析
Dec 03 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
Python加密技术之RSA加密解密的实现
Apr 08 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使用数组填充下拉列表框的方法
2015/03/31 PHP
PHP编写简单的App接口
2016/08/28 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
Python字符串和文件操作常用函数分析
2015/04/08 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
Python爬豆瓣电影实例
2018/02/23 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
python返回数组的索引实例
2019/11/28 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
初婚未育未抱养证明
2014/01/12 职场文书
检查接待方案
2014/02/27 职场文书
六一儿童节主持词
2014/03/21 职场文书
一文解答什么是MySQL的回表
2022/08/05 MySQL
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技