验证码

在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻业务服务器、数据库服务器的压力。

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中示例验证码的实现总结相关推荐

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

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

  2. Django项目实现验证码

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

  3. echarts导入mysql数据库_Echarts最新:Django中从mysql数据库中获取数据传到echarts方式_爱安网 LoveAn.com...

    关于"Echarts"的最新内容 聚合阅读 这篇文章主要介绍了基于vue+echarts 数据可视化大屏展示的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...

  4. 辛星php函数,辛星和您用更简略的方式去实现PHP中的验证码

    辛星和您用更简单的方式去实现PHP中的验证码 说实话,提到验证码我想大家都不会陌生,确实,验证码还是挺常见的,现在搜索一下PHP的验证码类简直是海量的数据,那我们今天就来实现一个自己的验证码把,不过它 ...

  5. Django中提供的6种缓存方式

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用: 缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

  6. 如何在Django中以GROUP BY查询?

    本文翻译自:How to query as GROUP BY in django? I query a model: 我查询一个模型: Members.objects.all() And it ret ...

  7. 在Django中,“子弹”是什么?

    当我阅读Django代码时,我经常在模型中看到所谓的"子弹". 我不太清楚这是什么,但是我知道它与URL有关. 应该如何以及何时使用这种this子? (我已经在本词汇表中阅读了其定 ...

  8. 在django中区分null = True,空白= True

    当我们在Django中添加数据库字段时,通常会编写models.CharField(max_length=100, null=True, blank=True) . 对ForeignKey , Dec ...

  9. python的目的及应用_python Django中的apps.py的目的是什么_python_脚本之家

    This question has been asked earlier: 07000 Application configuration objects store metadata for an ...

最新文章

  1. 百度云加速 ajax,使用百度云加速后网站打开速度慢、广告不显示的解决方法
  2. Ubuntu下自动挂载Windows分区的方法
  3. [编写高质量代码:改善java程序的151个建议]建议69 列表相等只需关心元素相等...
  4. 使用SHA1、SHA2双证书进行微软数字签名
  5. 干货 | 金融级消息队列的演进 — 蚂蚁金服的实践之路
  6. linux的管道 |和grep命令以及一些其他命令(diff,echo,cat,date,time,wc,which,whereis,gzip,zcat,unzip,sort)...
  7. var和dynamic的区别及如何正确使用dynamic?
  8. C语言。自定义函数简单版
  9. Hibernate学习之Hibernate注解总结
  10. [html] 说说如果a链接href=““(空)时点击时会有什么表现?
  11. GBDT(梯度提升决策树)总结笔记
  12. php ip获取邮政编码,php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法...
  13. 计算机二级考试科目python难吗_计算机二级python考试难吗
  14. weblogic的安装、目录结构、启动
  15. 什么是软件测试,测试基础有哪些?
  16. psp模拟器完美字库_安卓PSP模拟器评测:战神——斯巴达之魂
  17. 【转】《Unity Shader入门精要》冯乐乐著 书中彩图
  18. 支付宝VS微信,谁在抄袭谁?
  19. 基于51单片机的PC机控制系统
  20. 重置Ubuntu root 密码

热门文章

  1. 查看端口是否被占用,以及端口的应用名称
  2. Almost Arithmetic Progression
  3. codeforces 303 div2 E
  4. Android应用程序消息处理机制(Looper、Handler)分析
  5. [Python] NotImplemented 和 NotImplementedError 区别
  6. php的缓存机制,PHP缓存机制
  7. tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!
  8. java的沙盒安全模式_Java沙箱机制
  9. python爬虫什么网站都能爬吗_python如何爬取动态网站
  10. python正则表达式入门_Python中的正则表达式教程