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中基本的日期时间处理的学习教程
Oct 16 Python
Python使用asyncio包处理并发详解
Sep 09 Python
Python enumerate索引迭代代码解析
Jan 19 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Django如何实现上传图片功能
Aug 16 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 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 手机归属地查询 api
2010/02/08 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
python 字符串常用函数详解
2019/09/11 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
分公司经理岗位职责
2013/11/11 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
golang特有程序结构入门教程
2021/06/02 Python
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js