介绍
$(函数(){
$ (" # vcode”)。点击(函数(){
(美元).attr (“src”、“/app/getvcode”+ math . random ())
})
})
脚本> 这期内容当中小编将会给大家带来有关使用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 ">
观点视图
& # 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框架怎么实现验证码功能