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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
python中的lambda表达式用法详解
Jun 22 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
分享一下如何编写高效且优雅的 Python 代码
Sep 07 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
Python2和Python3的共存和切换使用
Apr 12 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
Django models filter筛选条件详解
Mar 16 Python
Pycharm中如何关掉python console
Oct 27 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 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
第十四节--命名空间
2006/11/16 PHP
php5中类的学习
2008/03/28 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
javascript实现复选框选中属性
2015/03/25 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
python内置数据类型之列表操作
2018/11/12 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
麦当劳辞职信范文
2014/01/18 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
《将心比心》教学反思
2014/04/08 职场文书
一年级学生评语
2014/04/23 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
社区工作者演讲稿
2014/05/23 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript