django基础知识之验证码:
验证码
- 在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力
- 使用验证码也是一种有效的防止crsf的方法
- 验证码效果如下图:
验证码视图
- 新建viewsUtil.py,定义函数verifycode
- 此段代码用到了PIL中的Image、ImageDraw、ImageFont模块,需要先安装Pillow(3.4.1)包,详细文档参考http://pillow.readthedocs.io/en/3.4.x/
- Image表示画布对象
- ImageDraw表示画笔对象
ImageFont表示字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont”
代码如下:
from django.http import HttpResponse
def verifycode(request):#引入绘图模块from PIL import Image, ImageDraw, ImageFont#引入随机函数模块import random#定义变量,用于画面的背景色、宽、高bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)width = 100height = 25#创建画面对象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))]#构造字体对象font = ImageFont.truetype('FreeMono.ttf', 23)#构造字体颜色fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))#绘制4个字draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)#释放画笔del draw#存入session,用于做进一步验证request.session['verifycode'] = rand_str#内存文件操作import cStringIObuf = cStringIO.StringIO()#将图片保存在内存中,文件类型为pngim.save(buf, 'png')#将内存中的图片数据返回给客户端,MIME类型为图片pngreturn HttpResponse(buf.getvalue(), 'image/png')
配置url
- 在urls.py中定义请求验证码视图的url
from . import viewsUtilurlpatterns = [url(r'^verifycode/$', viewsUtil.verifycode),
]
显示验证码
- 在模板中使用img标签,src指向验证码视图
<img id='verifycode' src="/verifycode/" alt="CheckCode"/>
- 启动服务器,查看显示成功
- 扩展:点击“看不清,换一个”时,可以换一个新的验证码
<script type="text/javascript" src="/static/jquery-1.12.4.min.js"></script>
<script type="text/javascript">$(function(){$('#verifycodeChange').css('cursor','pointer').click(function() {$('#verifycode').attr('src',$('#verifycode').attr('src')+1)});});
</script>
<img id='verifycode' src="/verifycode/?1" alt="CheckCode"/>
<span id='verifycodeChange'>看不清,换一个</span>
- 为了能够实现提交功能,需要增加form和input标签
<form method='post' action='/verifycodeValid/'><input type="text" name="vc"><img id='verifycode' src="/verifycode/?1" alt="CheckCode"/>
<span id='verifycodeChange'>看不清,换一个</span>
<br>
<input type="submit" value="提交">
</form>
验证
- 接收请求的信息,与session中的内容对比
from django.http import HttpResponsedef verifycodeValid(request):vc = request.POST['vc']if vc.upper() == request.session['verifycode']:return HttpResponse('ok')else:return HttpResponse('no')
- 配置验证处理的url
urlpatterns = [url(r'^verifycodeValid/$', views.verifycodeValid),
]
第三方
- 可以在网上搜索“验证码”,找到一些第三方验证码提供网站,阅读文档,使用到项目中
转载于:https://www.cnblogs.com/huwei934/p/6978694.html
django基础知识之验证码:相关推荐
- python开发框架——Django基础知识(九)
hello!我是小J,每天一个小知识,一起学python,让技术无限发散. 模型类--增删改查 1. 演示工具shell的使用 2. 添加数据 3. 查询数据 3.1 基础条件查询 3.2 过滤查 ...
- python开发框架——Django基础知识(七)
hello!我是小J,每天一个小知识,一起学python,让技术无限发散. 模板 1. 模板配置 1.1 模板简介 1.2 模板的使用流程 1.3 模板配置 2. 模板使用 2.1 变量 2.2 ...
- python开发框架——Django基础知识(十一)
hello!我是小J,每天一个小知识,一起学python,让技术无限发散. DRF和Web 1. web应用模式 1.1 前后端不分离 1.2 前后端分离 2. 使用Django开发REST接口 ...
- Django基础知识
Django:一个开源的Web应用框架,由python写成 MVC:一种软件设计的典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑代码聚集到一个部件里面,在改进和个性化定制界面及用户 ...
- django 基础知识 ~ forms详解
一 简介 今天咱们来聊聊 django强大的表单功能 二 分类 1 ModelFrom ModelFrom只需要声明指定字段,其他的选择继承 2 Froms (我们今天主要推这个) ...
- Django基础知识MTV
Django简介 Django是使用Python编写的一个开源Web框架.可以用它来快速搭建一个高性能的网站. Django也是一个MVC框架.但是在Django中,控制器接受用户输入的部分由框架自行 ...
- django基础知识~RBAC实验部分代码记录
一 简介:小小的记录下具体的思路和相关代码 二 具体阐述 # setting处理逻辑 PERMISSION_SESSION_KEY = 'permissions' #这里填写需要存取权限的sessio ...
- django基础知识之分页:
分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...
- Django基础知识学习
1.Django是什么 Django 是一个由 Python 编写的开放源代码的 Web 应用程序开发框架.它采用了 MVT 软件设计模式,即 Model 模型.View 视图和 Templates ...
最新文章
- MindSpore应用目标
- C++ :: 的用法小结
- 实习随记-不定时更新
- k8s mysql 配置文件_k8s配置文件模板
- 如何计算Nand Flash要传入的行地址和列地址
- 【Python配置】Win10配置Python3、Numpy、PyCharm、Anaconda
- volley 框架的使用
- SCP对拷如何连接指定端口远程主机
- 【TSP】基于matlab遗传和模拟退火算法求解中国省会城市旅行商问题【含Matlab源码 1254期】
- vi编辑器 常用命令汇总
- 手机远程访问HTML5,如何使用手机连接远程桌面?
- 计算流体力学c语言教程,计算流体力学教程
- java校园门禁刷脸系统,学校人脸识别门禁系统打造智慧校园
- java旋转太极图_无聊做了个旋转太极图
- CSS3 高级教程之动画定义和使用
- Excel用户打死想不到:表格能做APP,WPS用户:金山系出品就是牛
- 【有限元分析】网格形状和网格尺寸对结果的影响——以矩形杆的静力分析为例
- windows 程序员装机必备软件
- [C/C++] 1046 划拳(15 分)
- 一起聊聊 dB、dB、dBm、dBi 吧!
热门文章
- java 矩阵题目_java练习本(20190611)
- 网易云api接口_网易云音乐你喜欢吗?你自己也可以做一个
- android横向滑动控件,Android学习——HorizontalScollview水平滚动控件
- 我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别
- java xml stax_Java StAX解析器示例以读取XML文件
- android圆角视图_Android图库视图示例教程
- Android AdapterViewFlipper
- android实例教程_Android共享首选项示例教程
- java.lang.OutOfMemoryError:Java堆空间
- scala运算符_Scala运算符–算术,关系,逻辑,按位,赋值