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中的对象,方法,类,实例,函数用法分析
Jan 15 Python
Python实现对excel文件列表值进行统计的方法
Jul 25 Python
python读写json文件的简单实现
Apr 11 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
Django web框架使用url path name详解
Apr 29 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
Python线程threading模块用法详解
Feb 26 Python
Python tkinter实现日期选择器
Feb 22 Python
Python一行代码实现自动发邮件功能
May 30 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 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使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
Python2.x中文乱码问题解决方法
2015/06/02 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
Django中多种重定向方法使用详解
2019/07/17 Python
对Python生成器、装饰器、递归的使用详解
2019/07/19 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
会话Bean的种类
2013/11/07 面试题
员工拓展培训方案
2014/02/15 职场文书
卫生系统先进事迹
2014/05/13 职场文书
文艺晚会策划方案
2014/06/11 职场文书
青奥会口号
2014/06/12 职场文书
医院节能减排方案
2014/06/13 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
话题作文之呼唤
2019/12/18 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers