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 30 Python
在Python中使用__slots__方法的详细教程
Apr 28 Python
python计算一个序列的平均值的方法
Jul 11 Python
Python基于二分查找实现求整数平方根的方法
May 12 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
python3写的简单本地文件上传服务器实例
Jun 04 Python
Python爬虫实现验证码登录代码实例
May 10 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
python如何爬取动态网站
Sep 09 Python
Python基于Faker假数据构造库
Nov 30 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及Zend Engine的线程安全模型分析
2011/11/10 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
[01:46]新英雄登场
2019/09/10 DOTA
python 正则式 概述及常用字符
2009/05/07 Python
python基础教程之自定义函数介绍
2014/08/29 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
HTML5注册页面示例代码
2014/03/27 HTML / CSS
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
机械工程师求职自我评价
2013/09/23 职场文书
新学期开学标语
2014/06/30 职场文书
小学家长学校培训材料
2014/08/24 职场文书
本溪水洞导游词
2015/02/11 职场文书
商务信函英语问候语
2015/11/10 职场文书