Django中示例验证码的实现总结
验证码
在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻业务服务器、数据库服务器的压力。
1)安装包Pillow3.4.1。
1
|
pip install Pillow = = 3.4 . 1
|
点击查看PIL模块APIhttp://pillow.readthedocs.io/en/3.4.x/,以下代码中用到了Image、ImageDraw、ImageFont对象及方法。
2)在booktest/views.py文件中,创建视图verify_code。
- 提示1:随机生成字符串后存入session中,用于后续判断。
- 提示2:视图返回mime-type为image/png。
def verify_code(request):#引入随机函数模块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))]#构造字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont”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"""python2的为# 内存文件操作import cStringIObuf = cStringIO.StringIO()"""# 内存文件操作-->此方法为python3的import iobuf = io.BytesIO()#将图片保存在内存中,文件类型为pngim.save(buf, 'png')#将内存中的图片数据返回给客户端,MIME类型为图片pngreturn HttpResponse(buf.getvalue(), 'image/png')
3)打开booktest/urls.py文件,配置url。
1
|
url(r '^verify_code/$' , views.verify_code),
|
4)运行服务器,在浏览器中输入如下网址,即可看到。
1
|
http: / / 127.0 . 0.1 : 8000 / verify_code /
|
利用以上画布代码生成__看不请换一张__效果
打开templates/booktest文件,创建show_verify2.html,编写代码如下:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>show_verify</title>
#需要导入js文件<script src="/static/js/jquery-1.12.4.min.js"></script><script>$(function () {// 添加点击事件 鼠标浮动时变成小手$('#change').css('cursor', 'pointer').click(function () {// 获取到图片的src路径 换一个新的路径 此代码相当与在原来的基础上增加数据$('#yzm').attr('src', $("#yzm").attr('src')+'?1')})})</script> </head> <body> <form action="/verify_check2/" method="post">{% csrf_token %}请输入验证码:<input type="text" name="verify"><br>{# 方法一:#} {# <img id='yzm' src="/verify_code/"/>#} {# <span id="change">#} {# <a href="/verify_show/" style="text-decoration:none">看不清楚,换一个</a>#} {# </span>#} {# <hr>#}
{#方法二:#} <img id="yzm" src="/verify_code/?1"/> <span id="change"><a href="" style="text-decoration:none">看不清,换一个</a> </span> <input type="submit" value="提交"> </form> </body> </html>
def verify_check2(request):
"""验证码的验证"""# 1.获取post请求当中的输入验证码的内容verify = request.POST.get('verify')# 2.获取浏览器请求当中的session中的值verifycode = request.session.get('verifycode')# 3.判断两个验证码是否相同if verify == verifycode:return HttpResponse('ok')else:return HttpResponse('err')def show_verify2(request):"""显示验证码界面"""return render(request, 'booktest/show_verify2.html')
url(r'^verify_code/$', views.verify_code), # 配置验证码图片url(r'^show_verify2/$', views.show_verify2), # 显示验证码界面url(r'^verify_check2/$', views.verify_check2) # 检测验证码
总结:以上就是画布生成的验证码保存到session中发给浏览器,当浏览器提交验证时,将用户输入的验证码及session中的验证码对比即可
Django中示例验证码的实现总结相关推荐
- 83.Django项目中使用验证码
1. 概述 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apar ...
- Django项目实现验证码
1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install P ...
- echarts导入mysql数据库_Echarts最新:Django中从mysql数据库中获取数据传到echarts方式_爱安网 LoveAn.com...
关于"Echarts"的最新内容 聚合阅读 这篇文章主要介绍了基于vue+echarts 数据可视化大屏展示的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...
- 辛星php函数,辛星和您用更简略的方式去实现PHP中的验证码
辛星和您用更简单的方式去实现PHP中的验证码 说实话,提到验证码我想大家都不会陌生,确实,验证码还是挺常见的,现在搜索一下PHP的验证码类简直是海量的数据,那我们今天就来实现一个自己的验证码把,不过它 ...
- Django中提供的6种缓存方式
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用: 缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...
- 如何在Django中以GROUP BY查询?
本文翻译自:How to query as GROUP BY in django? I query a model: 我查询一个模型: Members.objects.all() And it ret ...
- 在Django中,“子弹”是什么?
当我阅读Django代码时,我经常在模型中看到所谓的"子弹". 我不太清楚这是什么,但是我知道它与URL有关. 应该如何以及何时使用这种this子? (我已经在本词汇表中阅读了其定 ...
- 在django中区分null = True,空白= True
当我们在Django中添加数据库字段时,通常会编写models.CharField(max_length=100, null=True, blank=True) . 对ForeignKey , Dec ...
- python的目的及应用_python Django中的apps.py的目的是什么_python_脚本之家
This question has been asked earlier: 07000 Application configuration objects store metadata for an ...
最新文章
- 百度云加速 ajax,使用百度云加速后网站打开速度慢、广告不显示的解决方法
- Ubuntu下自动挂载Windows分区的方法
- [编写高质量代码:改善java程序的151个建议]建议69 列表相等只需关心元素相等...
- 使用SHA1、SHA2双证书进行微软数字签名
- 干货 | 金融级消息队列的演进 — 蚂蚁金服的实践之路
- linux的管道 |和grep命令以及一些其他命令(diff,echo,cat,date,time,wc,which,whereis,gzip,zcat,unzip,sort)...
- var和dynamic的区别及如何正确使用dynamic?
- C语言。自定义函数简单版
- Hibernate学习之Hibernate注解总结
- [html] 说说如果a链接href=““(空)时点击时会有什么表现?
- GBDT(梯度提升决策树)总结笔记
- php ip获取邮政编码,php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法...
- 计算机二级考试科目python难吗_计算机二级python考试难吗
- weblogic的安装、目录结构、启动
- 什么是软件测试,测试基础有哪些?
- psp模拟器完美字库_安卓PSP模拟器评测:战神——斯巴达之魂
- 【转】《Unity Shader入门精要》冯乐乐著 书中彩图
- 支付宝VS微信,谁在抄袭谁?
- 基于51单片机的PC机控制系统
- 重置Ubuntu root 密码
热门文章
- 查看端口是否被占用,以及端口的应用名称
- Almost Arithmetic Progression
- codeforces 303 div2 E
- Android应用程序消息处理机制(Looper、Handler)分析
- [Python] NotImplemented 和 NotImplementedError 区别
- php的缓存机制,PHP缓存机制
- tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!
- java的沙盒安全模式_Java沙箱机制
- python爬虫什么网站都能爬吗_python如何爬取动态网站
- python正则表达式入门_Python中的正则表达式教程