这里有新鲜出炉的Django 入门教程,程序狗速度看过来!
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
下面小编就为大家带来一篇基于Django的python验证码(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
验证码
在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力
使用验证码也是一种有效的防止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 = 100
- height = 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 io
- buf = io.StringIO()
- #将图片保存在内存中,文件类型为png
- im.save(buf, 'png')
- #将内存中的图片数据返回给客户端,MIME类型为图片png
- return HttpResponse(buf.getvalue(), 'image/png')
配置url
在urls.py中定义请求验证码视图的url
- from . import viewsUtil
- urlpatterns = [
- 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 HttpResponse
- def 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),
- ]
以上这篇基于Django的python验证码(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHPERZ。
来源: http://www.phperz.com/article/17/1104/351838.html