Django之随机图形验证码
实现效果:点击右边图片验证码会变
前端代码:
<div class="container">
<div class="row">
<div class="col-md-6">
<label for="yzm_id">验证码:</label>
<input type="text" class="form-control" id="yzm_id" placeholder="" name="yzm">
</div>
<div class="col-md-6">
<img id='yzm_img_id' src="/yzm/" alt="" style="width: 260px;height: 40px">
</div>
</div>
<div>
一个input输入框和一个用div包裹的img标签,用Bootstrap的栅格系统各占6格(只是为了美观,可以不用样式)
后端代码:
from PIL import Image,ImageDraw,ImageFont
from io import BytesIO,StringIO
#色彩的设置为(*,*,*),所以随机返回三个数
def r_num(number):
#number为2指的是背景颜色,把背景颜色和字体颜色分开,不然当颜色一样时,不容易看到
if number==2:
return random.randint(0,128),random.randint(0,128),random.randint(0,128)
#number==1指的是字体颜色,字体颜色深一些比较养眼
if number == 1:
return random.randint(128, 255), random.randint(128, 255), random.randint(128, 255)
def yzm(request):
#创建一个Image对象,‘RGB’是颜色的模式。第二个参数是验证码的大小。第三个参数是三个随机数,当然也用英语单词指定颜色,比如red,这里为了随机性选择了用三个数字
yzm_img=Image.new("RGB",(260,40),r_num(1))
#为yzm_img对象创建一个画笔
draw=ImageDraw.Draw(yzm_img)
#指定字体的格式,ttf文件自己在网上下载,放入static文件夹中,40指的是字体的大小
font=ImageFont.truetype('static/1.ttf',40)
#存放验证码
code=''
#循环5次,所以验证码是5位
for i in range(5):
#随机0到9的数字
random_num=str(random.randint(0,9))
#随机65到90的数字,chr是把数字对比ASCLL码表转为字母。65到90是大写字母
random_up=str(chr(random.randint(65,90)))
#同上,随机小写字母
random_low=str(chr(random.randint(97,122)))
#从三个字符中随机选取出一个
random_code=random.choice([random_num,random_up,random_low])
#把字符写入图片。第一个参数(x,y),坐标,如果坐标位置写死,那么将会全部挤到一起,第二个参数,指定写入的字符。第三参数指定字符的格式
draw.text((45*i,-5),random_code,r_num(2),font)
code+=random_code
io_obj=BytesIO()
#把图片存放到内存空间中
yzm_img.save(io_obj,'png')
#给session中添加验证码
request.session['code']=code
#返回二进制数据
return HttpResponse(io_obj.getvalue())
现在刷新就可以刷新验证码了
还差点击验证码就能更换验证码
前端脚本代码:
这里这么写是因为只要在地址后面加上字符,那么就刷新图片
$('#yzm_img_id').click(function () {
var path2 = $(this).attr('src');
$(this).attr('src', path2 += '?')
});
Django之随机图形验证码的更多相关文章
- 基于Django的python验证码
验证码 在用户注册.登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力 使用验证码也是一种有效的防止crsf的方法 验证码效果如下图: 验证码视 ...
- 72、django之简单验证码实现与form表单钩子函数补充
本篇主要讲解简单的验证码实现,验证码使用基本都是找现成的组件来实现,用代码实现这个简单功能主要是了解了解验证码内部的实现. 本篇导航: 五位验证码图示 代码实现 登录验证 Form组件钩子函数补充 一 ...
- django 发送手机验证码
一.流程分析: 1.用户在项目前端,输入手机号,然后点击[获取验证码],将手机号发到post到后台. 2.后台验证手机号是否合法,是否已被占用,如果通过验证,则生成验证码,并通过运行脚本,让短信运营商 ...
- django之简单验证码实现与form表单钩子函数补充
本篇主要讲解简单的验证码实现,验证码使用基本都是找现成的组件来实现,用代码实现这个简单功能主要是了解了解验证码内部的实现. 本篇导航: 五位验证码图示 代码实现 登录验证 Form组件钩子函数补充 一 ...
- django网页图片验证码功能
在一个正常的登录系统中,验证码是非常重要的,用于识别人机,毕竟我们都知道,这个世界中存在着万恶的爬虫,验证码有很多种方式,有图片的,有邮件的,有短信的,有拼图的,不管什么样的验证码,目的都是验证访问用 ...
- Django框架之验证码生成示例
一.生成随机颜色的图片 1)前端代码展示 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- django中的验证码
from django.shortcuts import renderfrom PIL import Imagefrom PIL import ImageDrawfrom PIL import Ima ...
- Django之动态验证码的生成
kind.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Django (八) 中间件&验证码&富文本&缓存
中间件&验证码&富文本&缓存 1. 中间件&AOP 中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程) 中间件的本质就是一 ...
随机推荐
- ZZZPHP1.61 代码审计-从SQL注入到Getshell
近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少. 今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏 ...
- python中字符串拆分与合并——split()、join()、strip()和replace()
Python3 split()方法 描述split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串 语法split()方法语法: str.split(str= ...
- 操作系统底层原理与Python中socket解读
目录 操作系统底层原理 网络通信原理 网络基础架构 局域网与交换机/网络常见术语 OSI七层协议 TCP/IP五层模型讲解 Python中Socket模块解读 TCP协议和UDP协议 操作系统底层原理 ...
- 【Python3爬虫】用Python中的队列来写爬虫
一.写在前面 当你看着你的博客的阅读量慢慢增加的时候,内心不禁有了些小激动,但是不得不吐槽一下--博客园并不会显示你的博客的总阅读量是多少.而这一篇博客就将教你怎么利用队列这种结构来编写爬虫,最终获取 ...
- VBC#代码互转工具
VBCSHARP代码互转工具,适用于VB.NET和C#代码相互转换翻译,可代码段转换和批量文件转换.于2019年3月5日制作完成,允许各群随意分发和使用. 下载地址:下载链接 欢迎使用 下载地址:下载 ...
- 简单工厂模式(Simple Factory Pattern)
简单工厂模式概述 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被 ...
- IDEA创建applicationContext.xml 无法自动提示,文件图标是文本类型
问题:创建applicationContext.xml 的时候注册到file里边去了. 解决方法: 打开设置界面找到以下界面: 删除掉 Text 里边的 applicationContext.xml ...
- Maven项目pom文件设置JDK版本
maven项目创建之后有时候默认设定了java的低版本,每次导入项目或者更新maven的时候可能或出现一些报错,在pom.xml设定版本免除这个问题 <build> <finalNa ...
- Entity Framework Core 2.1,添加种子数据
EFCore 2.1出来有一段时间了,里面的新功能还没怎么用,今天研究下如何使用EF Core 2.1添加种子数据. 这部分的官方文档地址是:https://docs.microsoft.com/en ...
- 中国.NET:各地微软技术俱乐部汇总(更新中...)
与微软技术的发展历程相似,微软俱乐部的发展同样经历着沉沉浮浮.2002年周庆麒先生创办的著名Office技术论坛Excel Home的上线,各种线上技术社区在中国的互联网世界中萌发.接着以鞠海洋(广州 ...