瓶实现验证码并验证功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>什么是瓶? 强>
瓶是一个用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)瓶实现验证码并验证功能