验证码

  • 在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力
  • 使用验证码也是一种有效的防止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基础知识之验证码:相关推荐

  1. python开发框架——Django基础知识(九)

      hello!我是小J,每天一个小知识,一起学python,让技术无限发散. 模型类--增删改查 1. 演示工具shell的使用 2. 添加数据 3. 查询数据 3.1 基础条件查询 3.2 过滤查 ...

  2. python开发框架——Django基础知识(七)

      hello!我是小J,每天一个小知识,一起学python,让技术无限发散. 模板 1. 模板配置 1.1 模板简介 1.2 模板的使用流程 1.3 模板配置 2. 模板使用 2.1 变量 2.2 ...

  3. python开发框架——Django基础知识(十一)

      hello!我是小J,每天一个小知识,一起学python,让技术无限发散. DRF和Web 1. web应用模式 1.1 前后端不分离 1.2 前后端分离 2. 使用Django开发REST接口 ...

  4. Django基础知识

    Django:一个开源的Web应用框架,由python写成 MVC:一种软件设计的典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑代码聚集到一个部件里面,在改进和个性化定制界面及用户 ...

  5. django 基础知识 ~ forms详解

    一 简介 今天咱们来聊聊 django强大的表单功能 二 分类    1 ModelFrom ModelFrom只需要声明指定字段,其他的选择继承    2 Froms (我们今天主要推这个)     ...

  6. Django基础知识MTV

    Django简介 Django是使用Python编写的一个开源Web框架.可以用它来快速搭建一个高性能的网站. Django也是一个MVC框架.但是在Django中,控制器接受用户输入的部分由框架自行 ...

  7. django基础知识~RBAC实验部分代码记录

    一 简介:小小的记录下具体的思路和相关代码 二 具体阐述 # setting处理逻辑 PERMISSION_SESSION_KEY = 'permissions' #这里填写需要存取权限的sessio ...

  8. django基础知识之分页:

    分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...

  9. Django基础知识学习

    1.Django是什么 Django 是一个由 Python 编写的开放源代码的 Web 应用程序开发框架.它采用了 MVT 软件设计模式,即 Model 模型.View 视图和 Templates ...

最新文章

  1. MindSpore应用目标
  2. C++ :: 的用法小结
  3. 实习随记-不定时更新
  4. k8s mysql 配置文件_k8s配置文件模板
  5. 如何计算Nand Flash要传入的行地址和列地址
  6. 【Python配置】Win10配置Python3、Numpy、PyCharm、Anaconda
  7. volley 框架的使用
  8. SCP对拷如何连接指定端口远程主机
  9. 【TSP】基于matlab遗传和模拟退火算法求解中国省会城市旅行商问题【含Matlab源码 1254期】
  10. vi编辑器 常用命令汇总
  11. 手机远程访问HTML5,如何使用手机连接远程桌面?
  12. 计算流体力学c语言教程,计算流体力学教程
  13. java校园门禁刷脸系统,学校人脸识别门禁系统打造智慧校园
  14. java旋转太极图_无聊做了个旋转太极图
  15. CSS3 高级教程之动画定义和使用
  16. Excel用户打死想不到:表格能做APP,WPS用户:金山系出品就是牛
  17. 【有限元分析】网格形状和网格尺寸对结果的影响——以矩形杆的静力分析为例
  18. windows 程序员装机必备软件
  19. [C/C++] 1046 划拳(15 分)
  20. 一起聊聊 dB、dB、dBm、dBi 吧!

热门文章

  1. java 矩阵题目_java练习本(20190611)
  2. 网易云api接口_网易云音乐你喜欢吗?你自己也可以做一个
  3. android横向滑动控件,Android学习——HorizontalScollview水平滚动控件
  4. 我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别
  5. java xml stax_Java StAX解析器示例以读取XML文件
  6. android圆角视图_Android图库视图示例教程
  7. Android AdapterViewFlipper
  8. android实例教程_Android共享首选项示例教程
  9. java.lang.OutOfMemoryError:Java堆空间
  10. scala运算符_Scala运算符–算术,关系,逻辑,按位,赋值