作个记录,这个东东,是可以到处照搬的。

WINDOWS下和LINUX下,字体对象获取方式不一样。

为了用户体验,字体大小也重要的。

另外,为了照顾个别字母认不出来的人,提供刷新功能。

一,验证码函数

def verify_code(request):from PIL import Image, ImageDraw, ImageFont# 引入随机函数模块import random# 定义变量,用于画面的背景色、宽、高bgcolor = (random.randrange(40, 200), random.randrange(40, 200), 255)width = 200height = 40# 创建画面对象im = Image.new('RGB', (width, height), bgcolor)# 创建画笔对象draw = ImageDraw.Draw(im)# 调用画笔的point()函数绘制噪点for i in range(0, 100):xy = (random.randrange(0, width), random.randrange(0, height))fill = (random.randrange(0, 255), 255, random.randrange(0, 255))draw.point(xy, fill=fill)# 定义验证码的备选值str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'# 随机选取4个值作为验证码rand_str = ''for i in range(0, 4):rand_str += str1[random.randrange(0, len(str1))]# 构造字体对象,一个默认的(字体太小),一个LINUX下的,一个WINDOWS下的。23号可以了。# font = ImageFont.load_default().font# font = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf', 23)font = ImageFont.truetype('C:\Windows\Fonts\Arial.ttf', 23)# 构造字体颜色fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))# 绘制4个字,要注意间距draw.text((20, 10), rand_str[0], font=font, fill=fontcolor)draw.text((70, 10), rand_str[1], font=font, fill=fontcolor)draw.text((120, 10), rand_str[2], font=font, fill=fontcolor)draw.text((170, 10), rand_str[3], font=font, fill=fontcolor)# 释放画笔del draw# 存入session,用于做进一步验证request.session['verify_code'] = rand_str# 内存文件操作import iobuf = io.BytesIO()# 将图片保存在内存中,文件类型为pngim.save(buf, 'png')# 将内存中的图片数据返回给客户端,MIME类型为图片pngreturn HttpResponse(buf.getvalue(), 'image/png')

二,前端写法

<div class="row cl"><label class="form-label col-xs-3"></label><div class="formControls col-xs-2"><input type="text" name="vc" placeholder="验证码" rows="1" class="input-text size-L" required id="id_vc"></div><div class="formControls col-xs-5"><img id='verify_code' src="{% url 'verify_code' %}?1" alt="CheckCode"/><span id='verify_codeChange'><i class="icon Hui-iconfont"></i></span></div></div>

<script type="text/javascript">$(function(){$('#verify_codeChange').css('cursor','pointer').click(function() {$('#verify_code').attr('src',$('#verify_code').attr('src')+1)});});
</script>

三,后台session验证

        if vc.upper() != request.session['verify_code']:error.append('验证码错误!')return render(request, "accounts/login.html", error)

四,样子

转载于:https://www.cnblogs.com/aguncn/p/10317502.html

django项目验证码(PIL库实现)相关推荐

  1. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)...

    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen, 发布日期: 2014-05 ...

  2. 部署Django项目到华为云服务器教程

    Ubuntu 20.04 + Python3.7 + mysql5.7 + Django4.1.3 + 宝塔Linux面板 文章目录 1.连接华为云服务器 2.安装宝塔linux面板 3.安装项目对应 ...

  3. 83.Django项目中使用验证码

    1. 概述 ​ 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apar ...

  4. Django项目实现验证码

    1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install P ...

  5. 使用Python PIL库实现简单验证码的去噪处理

    想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括:将彩色图片转换成灰度图.将灰度图二值化和去除噪点三个基本过程.这里仅以比较简单的验证码为例, ...

  6. python中如何安装django库_python安装好django库,新建django项目

    我安装好django库之后,想在pycharm里新建django项目,发现没有django选项.百度后发现只有专业版才可以直接创建django项目,社区版推荐用命令创建,如下: 1. 在DOS黑窗口下 ...

  7. Python使用Pillow(PIL)库实现验证码图片

    Python使用Pillow(PIL)库实现验证码图片 Pillow库有很多用途,本文使用Pillow来生成随机的验证码图片. Pillow的用法参考:https://blog.csdn.net/we ...

  8. python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤

    字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...

  9. Django项目后端实现注册功能---短信验证码(容联云)。

    django项目gitee仓库地址:https://gitee.com/YANGYUE0205/meiduo_project.git 一, 总体逻辑分析. 要点: 1.为了避免用户使用图形验证码恶意测 ...

最新文章

  1. 如何选择合适的损失函数,请看......
  2. Python 21 Flask(二)上下文管理详解
  3. c# 字符串是否相等
  4. IOS中GPS定位偏移纠正(适用于Google地图)
  5. java Serializable和Externalizable序列化反序列化详解--转
  6. com组件的ref有时需要有时不需要?_Vue3组件通信总结
  7. 避免不必要的Spring配置组件扫描
  8. 汇编写java模块_java – maven汇编插件moduleset源指令不包括任何文件,不符合附带的模块...
  9. Orange——The Data
  10. 图灵奖得主Jeff Ullman:机器学习不是数据科学的全部!统计学也不是!
  11. 动画学信奥 漫画学算法 CSP-J入门级 (三)、算法(依据「NOI大纲」)
  12. 二十四节气之大雪|PNG免扣素材,设计好素材
  13. Tpcc-mysql 结果解读
  14. 学习AJAX,解析XMLHttpRequest对象
  15. 九校联考-长沙市一中NOIP模拟总结
  16. 数据结构(郝斌课程内容概述)
  17. 程序员副业兼职5000+ ?
  18. 陀螺研究院|深圳数据要素市场化发展解读与未来展望
  19. Opencv的学习之图像滤波
  20. 各种分布(distribution)

热门文章

  1. ajax表单图片,js中使用ajax上传一个带有图片的表单数据
  2. java 文件crc校验_Java 对文件进行 CRC32 校验
  3. mybatis-generator一些注意点 2021-04-21
  4. deep learning for symbolic mathematics论文梳理
  5. html浮动代码_清除浮动与 BFC(块级格式化上下文)
  6. python import 类如何捕获clrt c_Python3 与 C# 扩展之~基础衍生
  7. 两个not exists_分享两个冷门但又超实用的 Vim 使用技巧!
  8. 计算机乘积函数讲解,计算机函数算法7
  9. android 布局颜色设置颜色设置,怎么在Android中利用view设置布局颜色
  10. echart 高度 不用 不撑满_你担心的高度近视老了之后是这样的