使用Django框架怎么实现验证码功能

  介绍

这期内容当中小编将会给大家带来有关使用Django框架怎么实现验证码功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>验证码

<强> 1,作用

<李>

在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力。

<李>

验证码需要使用绘图枕头

<李>

手动指定字体

<李>

绑定画布

<李>

模式

<李>

封装了绘制的API

<李>文本

<李>

点<李>

行<李>

<李>

需要模式

<李>

尺寸

<李>

背景色

<李>

pip3安装枕头

<李>

核心API

<李>

形象<李>

ImageDraw

<李>

ImageFont

<强> 2,业务流程

绘制验证码图片

background =,(10年,20年,30),//,RGB颜色

初始化画布

image =, Image.new (“RGB # 39;,(100年,50),背景)

获取画布中画笔对象

draw =, ImageDraw.Draw(图片)

绘制验证码,随机四个

font =, ImageFont.truetype (“path & # 39;、大小)   fontcolor =, (20、40、60)   draw.text ((x, y) & # 39; " # 39;,字体,fontcolor)

返回验证码内容

#,删除画笔   del 画   #保存图片到BytesIO对象   Import  io   时间=buf  io.BytesIO ()   image.save (buf & # 39; png # 39;)   #返回BytesIO中的内容   return  HttpResponse (buf.getvalue() & # 39;图像/png # 39;)

<强> 3代码范例

html页面

& lt; form 方法=皃ost", action=皗%, url  & # 39; sitesApp:登录# 39;,%}“比;   ,,{%,csrf_token  %}   ,,,& lt; div 类=發ogin"比;   ,,,,,& lt; div 类=癷nput-group"比;   ,,,,,,& lt; span 类=癷nput-group-addon", id=癰asic-addon1"在用户名& lt;/span>   ,,,,,,& lt; input 类型=皌ext",类=癴orm-control",占位符=癠sername", aria-describedby=癰asic-addon1", name=皍Name"比;   ,,,,,& lt;/div>   ,,,,,& lt; div 类=癷nput-group"比;   ,,,,,,& lt; span 类=癷nput-group-addon", id=癰asic-addon1"在密,,,,,,,,码& lt;/span>   ,,,,,,& lt; input 类型=皌ext",类=癴orm-control",占位符=癙assword", aria-describedby=癰asic-addon1", name=皍Pswd"比;   ,,,,,& lt;/div>   ,,,,,& lt; div 类=癷nput-group"比;   ,,,,,,& lt; span 类=癷nput-group-addon", id=癰asic-addon1"在验证码& lt;/span>   ,,,,,,& lt; input 类型=皌ext",类=癴orm-control",占位符=癆uth  code", aria-describedby=癰asic-addon1", name=皍Code"比;   ,,,,,& lt;/div>   ,,,,,& lt; div 类=皏code"比;   ,,,,,,,& lt; https://www.yisu.com/zixun/img  src="/app/getvcode/" id=" vcode ">   
     $(函数(){   $ (" # vcode”)。点击(函数(){   (美元).attr (“src”、“/app/getvcode”+ math . random ())   })   })   

观点视图

& # 39; & # 39; & # 39;   生成并返回验证码   & # 39;& # 39;& # 39;   def  getvcode(请求):   #,才能随机生成验证码   时间=population 才能;string.ascii_letters + string.digits   时间=letterlist 才能;random.sample(人口,4)   时间=vcode 才能;& # 39;. join (letterlist) & # 39;   #,才能保存该用户的验证码   request.session才能[& # 39;vcode& # 39;]=vcode   #,才能绘制验证码   #才能,需要画布,长宽颜色   image 才能=,Image.new (& # 39; rgb # 39;(176、60),颜色=getRandomColor ())   #,才能创建画布的画笔   时间=draw 才能;ImageDraw.Draw(图片)   #,才能绘制文字,字体所在位置   path 才能=,os.path.join (BASE_DIR & # 39;静态# 39;,& # 39;字体# 39;,& # 39;ADOBEARABIC-BOLDITALIC.OTF& # 39;)   font 才能=,ImageFont.truetype(路径,50)   for 才能小姐:拷贝范围(len (vcode)):   ,,,draw.text((20 + 40 *我,0),vcode[我],填补=getRandomColor(),字体(字体)   #,才能添加噪声   for 才能小姐:拷贝范围(500):   ,,,position =, (random.randint (0176), random.randint (0, 50))   ,,,draw.point(位置、填充=getRandomColor ())   #,才能返回验证码字节数据   #,才能创建字节容器   时间=buffer 才能;io.BytesIO ()   #,才能将画布内容丢入容器   null   null   null   null   null   null   null   null   null

使用Django框架怎么实现验证码功能