在写个人网站的时候做到登录界面需要使用到验证码登录 写个博文记录一下
# 生成随机验证码字符串
def random_numbers():
captcha_list = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z']
num = random.choices(captcha_list, k=4)
num_str = ''.join(num)
return num_str
逻辑很简单 数字和字母大小写的列表 然后随机选取4个 用这4个随机码生成一个字符串并且返回
def generate_captcha_image(save_path, number): # 生成验证码图片
image = ImageCaptcha()
if not os.path.exists(save_path): # 检测目录是否存在,不在则创建
os.makedirs(save_path)
img_path = '{}/{}.png'.format(save_path, number)
image.write(number, img_path) # 保存图片
return img_path
这里需要下载一个第三方库captcha 可以直接pip下载
需要传入保存的路径和随机字母 image.write直接生成验证码 最好返回了一个路径
import os
import random # 生成随机验证码
from captcha.image import ImageCaptcha # 生成图片
# 生成随机验证码字符串
def random_numbers():
captcha_list = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z']
num = random.choices(captcha_list, k=4)
num_str = ''.join(num)
return num_str
def generate_captcha_image(save_path, number): # 生成验证码图片
image = ImageCaptcha()
if not os.path.exists(save_path): # 检测目录是否存在,不在则创建
os.makedirs(save_path)
img_path = '{}/{}.png'.format(save_path, number)
image.write(number, img_path) # 保存图片
return img_path
if __name__ == "__main__":
num = random_numbers()
print(num)
image = generate_captcha_image("images", num)
print("验证码保存在:", image)
1、后期需要封装成一个接口 我希望这个接口可以返回图片路径(方便登录成功之后删除图片)和验证码的数值(方便验证 当然也可以从路径当中解析)
2、图片的删除逻辑这里没有写 如有需要自己添加
3、保存路径请自己更改 上传服务器建议保存到静态文件夹走nginx加载到界面
注意 需要下载第三方库captcha 直接使用命令 pip install captcha