瓶实现验证码并验证功能

  

瓶实现验证码并验证功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>什么是瓶?

瓶是一个用Python编写的网络应用程序框架,瓶是Python的Web框架,最大的特征是轻,便让开发者自由灵活的兼容要开发的特性又是;它由,阿明Ronacher 开发,他领导一个名为Pocco的国际Python爱好者团队只烧瓶基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。

<>强效果图:

点击图片,刷新页面,输入错误点击登录时都刷新验证码

瓶实现验证码并验证功能

<强>实现步骤:

第一步:先定义获取验证码的接口

verificationCode。py

#验证码   @api.route (& # 39;/imgCode& # 39;)   def  imgCode ():   .getImgCode return 才能imageCode () ()

此处的@api是在应用程序下注册的蓝图,专门用来做后台接口,所以注册了api蓝图

瓶实现验证码并验证功能

第二步:实现接口逻辑

1)首先实现验证码肯定要随机生成,所以我们需要用到随机库,本次需要随机生成字母和数字,

所以我们还需要用到string.string的ascii_letters是生成所有字母数字是生成所有数字0 - 9。具体代码如下

def  geneText ():   & # 39;才能& # 39;& # 39;生成4位验证码& # 39;& # 39;& # 39;   return 才能;& # 39;& # 39;. join (random.sample(时间+ string.ascii_letters  string.digits,, 4)), # ascii_letters是生成所有字母,数字是生成所有数字0 - 9

2)为了美观,我们需要给每个随机字符设置不同的颜色。我们这里用一个随机数来给字符设置颜色

def  rndColor ():   & # 39;才能& # 39;& # 39;随机颜色& # 39;& # 39;& # 39;   return 才能;(random.randint (32, 127,),, random.randint (32, 127,),, random.randint (32, 127))

3)此时我们已经可以生产图片验证码了,利用上面的随机数字和随机颜色生成一个验证码图片。

这里我们需要用到公益诉讼库,此时注意,python3安装这个库的时候不是pip安装公益诉讼而是pip安装枕头。

def  getVerifyCode ():   & # 39;才能& # 39;& # 39;生成验证码图形& # 39;& # 39;& # 39;   时间=code 才能;geneText ()   #,才能图片大小120×50   宽度,才能,height =, 120年,50   #,才能新图片对象   我才能=,Image.new (& # 39; rgb # 39;,,(宽度,高度),& # 39;白色# 39;)   #才能,字体   font 才能=,ImageFont.truetype(& # 39;应用程序/静态/arial.ttf& # 39;,, 40)   #,才能画出对象   时间=draw 才能;ImageDraw.Draw (im)   #,才能绘制字符串   for 才能;item 拷贝范围(4):   ,,,draw.text ((5, +, random.randint(3, 3), +, 23日,*,,,,5 +,random.randint (3,, 3)),   ,,,,,,,,文本=代码[项目],填补=rndColor(),字体(字体)   return 才能,im,代码

4)此时,验证码图片已经生成。然后需要做的就是把图片发送到前端去展示。

def  getImgCode ():   形象,才能,code =, getVerifyCode ()   #,才能图片以二进制形式写入   时间=buf 才能;BytesIO ()   image.save才能(buf, & # 39; jpeg # 39;)   时间=buf_str 才能;buf.getvalue ()   #,才能把buf_str作为响应返回前端,并设置首部字段   时间=response 才能;make_response (buf_str)   response.headers才能[& # 39;内容类型# 39;],=,& # 39;图像/gif # 39;   #,才能将验证码字符串储存在会话中   会话才能[& # 39;imageCode& # 39;],=,代码   return 才能响应

这里我们采用讲图片转换成二进制的形式,讲图片传送到前端,并且在这个返回值的头部,需要标明这是一个图片。

将验证码字符串储存在会话中,是为了一会在登录的时候,进行验证码验证。

5)好,此时我们的接口逻辑已经基本完成。然后我们还可以给图片增加以下干扰元素,比如增加一点横线。

def 画直线(num,画画,,宽度,,高度):   & # 39;才能& # 39;& # 39;划线& # 39;& # 39;& # 39;   for 才能;num 拷贝范围(num):   ,,,x1 =, random.randint (0,, width /, 2)   ,,,y1 =, random.randint (0,, height /, 2)   ,,,x2 =, random.randint(0,宽度)   ,,,y2 =, random.randint(时间/height  2,高度)   ,,,draw.line (((x1, y1), (x2, y2),,填补=& # 39;黑色# 39;,,宽度=1)

瓶实现验证码并验证功能