在用django写论坛的时候,需要有登录及注册功能。
故就登录界面后端需要生成随机验证码并传值给前端的代码进行编写如下。
验证码生成png需要调用到python的图形库
生成注册码img
import string import sys import random from PIL import Image,ImageDraw,ImageFont '''生成随机验证码''' def Capture(size=4, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) '''验证码生成图片''' def Capture_img(): # 定义使用Image类实例化一个长为120px,宽为30px,基于RGB的(255,255,255)颜色的图片 img1 = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255)) # 实例化一支画笔 draw1 = ImageDraw.Draw(img1, mode="RGB") # 定义要使用的字体 font1 = ImageFont.truetype('arial.ttf', 36) color1 = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) draw1.text([24,0], Capture(), color1, font=font1) # 把生成的图片保存为"capture2.png"格式 pngPath=sys.path[1]+"\staticcapture2.png" print(pngPath) with open(pngPath, "wb") as f: img1.save(f, format="png")
效果如:
自动化测试
由于验证码是随机生成的且存储在session内,所以如果测试要进行自动化测试,方案:
1.注释验证码的验证,当需要测试验证码功能时,请独立验证
2.修改源码,将生成的验证码存储备份到其他可获取的地方
3.调用pyhton的验证码识别类: Pillow(python图像处理库)、OpenCV(高级图像处理库)、pytesseract(识别库)
第三点仅适用本方式实现的验证码,如果前端是使用滑动等图形效果的,暂时不适用
且第三点从成本方案上说,不如1/2点快捷。
生成注册码img