首页 > 编程 > Python > 正文

Django实现登录随机验证码的示例代码

2020-02-15 21:55:59
字体:
来源:转载
供稿:网友

登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈

1. 生成随机验证码

 #_*_coding:utf-8_*_from PIL import Image,ImageDraw,ImageFont,ImageFilterimport randomimport math, string#字体的位置,不同版本的系统会有不同font_path = '/Library/Fonts/Arial.ttf'#font_path = '/Library/Fonts/Hanzipen.ttc'#生成几位数的验证码number = 4#生成验证码图片的高度和宽度size = (100,30)#背景颜色,默认为白色bgcolor = (255,255,255)#字体颜色,默认为蓝色fontcolor = (0,0,255)#干扰线颜色。默认为红色linecolor = (255,0,0)#是否要加入干扰线draw_line = True#加入干扰线条数的上下限line_number = (1,5)def gen_text():  source = list(string.ascii_letters)  for index in range(0,10):    source.append(str(index))  return ''.join(random.sample(source,number))#number是生成验证码的位数#用来绘制干扰线def gene_line(draw,width,height):  begin = (random.randint(0, width), random.randint(0, height))  end = (random.randint(0, width), random.randint(0, height))  draw.line([begin, end], fill = linecolor)def gene_code(save_path,filename):  width,height = size #宽和高  image = Image.new('RGBA',(width,height),bgcolor) #创建图片  font = ImageFont.truetype(font_path,25) #验证码的字体和字体大小  #font = ImageFont.truetype(25) #验证码的字体和字体大小  draw = ImageDraw.Draw(image) #创建画笔  #text = "我是中国人" #生成字符串  text = gen_text() #生成字符串  print(text)  font_width, font_height = font.getsize(text)  draw.text(((width - font_width) / number, (height - font_height) / number),text,/    font= font,fill=fontcolor) #填充字符串  if draw_line:    gene_line(draw, width, height)    gene_line(draw, width, height)    gene_line(draw, width, height)    gene_line(draw, width, height)  image = image.transform((width + 20, height +10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR) # 创建扭曲  image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强  image.save('%s/%s.png' %(save_path,filename)) # 保存验证码图片  print("savepath:",save_path)  return textif __name__ == "__main__":  gene_code('/tmp','test') #会把生成的图片存成/tmp/test.png

 2. 如何应用到你的django项目中

整个验证码的流程如下
1.用户访问登录页面,你的后台程序在给用户返回登录页面时,同时生成了验证码图片
2.用户输入账户信息和验证码数字,提交表单
3.后台判断用户输入的验证码和你生成的图片信息是否一致,如果一致,就代表验证码是没有问题的

问题就卡在第3步,你在第1步生成验证码并返回给用户后,由于一会用户还需要把这个验证码提交过来,你在后台就需要拿用户输入的和你之前生成 的验证码进行对比是否相等,

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表