介绍
使用Django如何实现随机生成图形验证码?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>实现效果:点击右边图片验证码会变强>
<强>前端代码:强>
& lt; div类=癱ontainer"比;
& lt; div类=皉ow"祝辞
& lt; div类=癱ol-md-6"祝辞
& lt;标签=皔zm_id"祝辞验证码:& lt;/label>
& lt;输入类型=皌ext"类=癴orm-control"id=皔zm_id"占位符=?“name=皔zm"比;
& lt;/div>
& lt; div类=癱ol-md-6"祝辞
& lt; img id=& # 39; yzm_img_id& # 39;src=https://www.yisu.com/zixun/皔zm/alt=" ">
<强>后端代码:强>
从公益诉讼导入图像,ImageDraw ImageFont
从进口BytesIO io, StringIO
#色彩的设置为(*,*,*),所以随机返回三个数
def r_num(数量):
#数字为2指的是背景颜色,把背景颜色和字体颜色分开,不然当颜色一样时,不容易看的到
如果数量==2:
返回random.randint (0128), random.randint (0128), random.randint (0128)
#==1指的是字体颜色,字体颜色深一些比较养眼
如果数量==1:
返回随机。randint(128、255),随机的。randint(128、255),随机的。randint (128、255)
def yzm(请求):
#创建一个图像对象,rgb # 39;是颜色的模式。第二个参数是验证码的大小。第三个参数是三个随机数,当然也用英语单词指定颜色,比如红色,这里为了随机性选择了用三个数字
yzm_img=Image.new (“RGB" (260, 40), r_num (1))
#为yzm_img对象创建一个画笔
画=ImageDraw.Draw (yzm_img)
#指定字体的格式,ttf文件自己在网上下载,放入静态文件夹中,40指的是字体的大小
字体=ImageFont.truetype(& # 39;静态/1. ttf # 39;, 40)
#存放验证码
代码=& # 39;& # 39;
#循环5次,所以验证码是5位
因为我在范围(5):
#随机0到9的数字
random_num=str (random.randint (0, 9))
#随机65到90的数字,空空的是把数字对比ASCLL码表转为字母90 .65点到是大写字母
random_up=str(科(random.randint (65、90)))
同号上,随机小写字母
random_low=str(科(random.randint (97122)))
#从三个字符中随机选取出一个
random_code=random.choice ([random_num、random_up random_low])
#把字符写入图片。第一个参数(x, y),坐标,如果坐标位置写死,那么将会全部挤到一起,第二个参数,指定写入的字符。第三参数指定字符的格式
draw.text((45 *我,5)、random_code r_num(2),字体)
代码+=random_code
io_obj=BytesIO ()
#把图片存放到内存空间中
yzm_img.save (io_obj & # 39; png # 39;)
#给会话中添加验证码
request.session[& # 39;代码# 39;]=代码
#返回二进制数据
之前返回HttpResponse (io_obj.getvalue ()) > 现在刷新就可以刷新验证码了
还差点击验证码就能更换验证码
<强>前端脚本代码:强>
这里这么写是因为只要在地址后面加上字符,那么就刷新图片
$ (& # 39;# yzm_img_id& # 39;)。点击(函数(){
var path3=$(这).attr (& # 39; src # 39;);
(美元).attr (& # 39; src # 39;, path3 +=& # 39;及# 63;& # 39;)
});
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。