首页 > 其他分享 >Django-4.5验证码-笔记

Django-4.5验证码-笔记

时间:2022-11-29 14:34:09浏览次数:64  
标签:4.5 randrange verify random 验证码 Django booktest font

验证码

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

手动实现验证码

接下来的代码不要求手动写出来,因为这种代码在网上可以搜到很多。

1)安装包Pillow3.4.1。

pip install Pillow==3.4.1

点击查看​​PIL模块API​​,以下代码中用到了Image、ImageDraw、ImageFont对象及方法。

2)在booktest/views.py文件中,创建视图verify_code。

  • 提示1:随机生成字符串后存入session中,用于后续判断。
  • 提示2:视图返回mime-type为image/png。
from PIL import Image, ImageDraw, ImageFont
from django.utils.six import BytesIO
...
def verify_code(request):
#引入随机函数模块
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))]
#构造字体对象,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
#内存文件操作
buf = BytesIO()
#将图片保存在内存中,文件类型为png
im.save(buf, 'png')
#将内存中的图片数据返回给客户端,MIME类型为图片png
return HttpResponse(buf.getvalue(), 'image/png')

3)打开booktest/urls.py文件,配置url。

url(r'^verify_code/$', views.verify_code),

4)运行服务器,在浏览器中输入如下网址。

http://127.0.0.1:8000/verify_code/

5)浏览效果如下图:

Django-4.5验证码-笔记_服务器

可以多刷新几次看值会不会变。

调用验证码

1)在booktest/views.py文件中,创建视图verify_show。

def verify_show(request):
return render(request,'booktest/verify_show.html')

2)打开booktest/urls.py文件,配置url。

url(r'^verify_show/$', views.verify_show),

3)在templates/booktest/目录下创建verify_show.html。

<html>
<head>
<title>验证码</title>
</head>
<body>
<form method="post" action="/verify_yz/">
{%csrf_token%}
<input type="text" name="yzm">
<img id="yzm" src="/verify_code/"/>
<span id="change">看不清,换一个</span>
<br>
<input type="submit" value="提交">
</form>
</body>
</html>

4)运行服务器,在浏览器中输入如下网址。

http://127.0.0.1:8000/verify_show/

5)浏览效果如下图:

Django-4.5验证码-笔记_验证码_02

验证

1)在booktest/views.py文件中,创建视图verify_yz。

def verify_yz(request):
yzm=request.POST.get('yzm')
verifycode=request.session['verifycode']
response=HttpResponse('no')
if yzm==verifycode:
response=HttpResponse('ok')
return response

2)打开booktest/urls.py文件,配置url。

url(r'^verify_yz/$', views.verify_yz),

3)回到浏览器后刷新,在文本框中填写验证码,点击提交按钮。

Django-4.5验证码-笔记_验证码_03

4)浏览效果如下图:

Django-4.5验证码-笔记_服务器_04

标签:4.5,randrange,verify,random,验证码,Django,booktest,font
From: https://blog.51cto.com/chen8866/5894991

相关文章

  • Django-3.1URLconf-笔记
    URLconf用户通过在浏览器的地址栏中输入网址请求网站,对于Django开发的网站,由哪一个视图进行处理请求,是由url匹配找到的。配置1)在test3/settings.py中通过ROOT_URLCONF指定ur......
  • Django-3.2视图-笔记
    视图视图就是python中的函数,视图一般被定义在"应用/views.py"文件中,此例中为"booktest/views.py"文件。视图必须返回一个HttpResponse对象或子对象作为响应。响应可以是一张......
  • NET 6 实现滑动验证码(三)、接口
    题外话,有网友说,这玩意根本很容易破解,确实是这样。但验证码这东西,就跟锁子很类似,防君子不防小人。验证码的发明其实是社会文明的退步。因为它阻碍了真正的使用者,却无法阻挡......
  • Django-2.5关联-笔记
    模型类关系关系字段类型关系型数据库的关系包括三种类型:ForeignKey:一对多,将字段定义在多的一端中。ManyToManyField:多对多,将字段定义在任意一端中。OneToOneField:一对一,将字......
  • Django-2.1内容复习-笔记
    定义模型类模型类被定义在"应用/models.py"文件中,此例中为"booktest/models.py"文件。模型类必须继承自Model类,位于包django.db.models中。提示:对于重要数据使用逻辑删除。......
  • Django-2.2模型类-笔记
    定义属性Django根据属性的类型确定以下信息:当前选择的数据库支持字段的类型渲染管理表单时使用的默认html控件在管理站点最低限度的验证django会为表创建自动增长的主键列,每......
  • python svg 验证码处理
        <svgxmlns="http://www.w3.org/2000/svg"width="130"height="55"viewBox="0,0,130,55"><rectwidth="100%"height="100%"fill="#b5b9b9"/><pathfill=......
  • Django视图中的请求与响应
    一请求一限制http请求视图中的request,实际上是django源码中的HTTPRequest的子类WSGIRequest类的实例对象,主要由django对客户端请求的http协议报文进行解析后得到的请求......
  • Pycharm 搭建 Django 项目
    1.安装需求在使用python框架Django需要注意下面事项Pycharm版本是专业版而不是社区版本Pycharm配置好了python解释器(一般我们现在用的都是python3)我自己使......
  • Django 模型层介绍与配置
    目录介绍数据库配置介绍模型层(ORM)不需要写sql操作数据库,定义模型类,操作模类来完成对数据库中的表进行增删改查,做数据库迁移的时候比较方便,换数据库的时候只需要在配置文......