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 cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
python使用Matplotlib画饼图
Sep 25 Python
python 判断参数为Nonetype类型或空的实例
Oct 30 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
python字典的setdefault的巧妙用法
Aug 07 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
python通过函数名调用函数的几种场景
Sep 23 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 Python
Python实现数据的序列化操作详解
Jul 07 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
Cannot modify header information错误解决方法
2008/10/08 PHP
php随机显示图片的简单示例
2014/02/15 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
php生成图片缩略图的方法
2015/04/07 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
理解JavaScript的prototype属性
2012/02/11 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
jquery处理json对象
2014/11/03 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
用python登录Dr.com思路以及代码分享
2014/06/25 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
python实现kmp算法的实例代码
2019/04/03 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
python实现扫雷小游戏
2020/04/24 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android