简单验证码
# python 实现验证码
#1
import random
n = 5
lis = list()
count = 0
while count<n:
count+=1
lis.append(str(random.randint(0,9)))
lis.append(chr(random.randint(65,90)))
lis.append(chr(random.randint(97,122)))
lis2 = random.sample(lis,n)
print(lis2)
lis1 = ''.join(lis2)
print(lis1)
# for i in lis2:
# print(i,end=' ')
#2
def get_verified(lenth):
code = ''
for i in range(lenth):
num = str(random.randint(0,9))
alp = chr(random.randint(97,122))
ATP = chr(random.randint(65,90))
code+=str(chr(random.randint(65,90)))
return code
print(get_verified(5))
高级验证码
极验科技验证码参考文档
from PIL import Image,ImageDraw,ImageFont
import random
from io import BytesIO,StringIO
"""
BytesIO, 能够存储数据 并以二进制的格式再返回给你
StringIO 能够存储数据 并以字符串的格式再返回给你
"""
"""
Image, 产生图片的
ImageDraw, 产生画笔的
ImageFont 控制字体样式
"""
def get_random():
return random.randint(0,255),random.randint(0,255),random.randint(0,255)
def get_code(request):
# 推到思路1:直接拿后端现成的图片 二进制模式打开发送
# with open(r'D:\上海Python11期视频\python11期视频\BBS\avatar\u205777803476556477fm26gp0.jpg','rb') as f:
# data = f.read()
# return HttpResponse(data)
# 图片验证码相关
def get_code(request):
# 推导思路2:利用模块产生图片 再发送给前端 pillow
# img_obj = Image.new('RGB',(310,35),'green') # 生成了一个图片对象
# img_obj = Image.new('RGB',(310,35),get_random()) # 生成了一个图片对象
# # 先利用文件操作将图片对象写入文件中
# with open('xxx.png','wb') as f:
# img_obj.save(f,'png')
# # 再利用文件操作将图片以二进制形式读取出来发送
# with open('xxx.png','rb') as f:
# data = f.read()
# return HttpResponse(data)
# 图片验证码相关
def get_code(request):
# 推到思路3:不再利用文件存取数据 借助于内存管理器
# img_obj = Image.new('RGB',(310,35),get_random())
# io_obj = BytesIO() # 生成一个内存管理器对象
# img_obj.save(io_obj,'png') # 你可以将io_obj当成文件句柄f
# return HttpResponse(io_obj.getvalue()) # 以二进制的方式取出数据
# 图片验证码相关
def get_code(request):
# 推到思路4(终极步骤) 图片上写字
img_obj = Image.new('RGB',(310,35),get_random())
img_draw = ImageDraw.Draw(img_obj) # 生成一个画笔对象
img_font = ImageFont.truetype('static/font/111.ttf',30) # 字体的样式
"""
所有的字体样式都是由.ttf结尾的文件控制的
"""
# 随机生成验证码 a~z A~Z 0~9
code = ''
for i in range(5):
random_upper = chr(random.randint(65,90))
random_lower = chr(random.randint(97,122))
random_int = str(random.randint(0,9))
temp = random.choice([random_upper,random_lower,random_int])
# 将产生的随机字符写到图片上
img_draw.text((i*45+45,0),temp,get_random(),img_font)
code += temp
print(code)
# 将随机验证码存储取来 以便其他函数调用
request.session['code'] = code
io_obj = BytesIO()
img_obj.save(io_obj,'png')
return HttpResponse(io_obj.getvalue())
进度条
import time
satat = time.time()
fac = 10
for i in range(fac+1):
print(f'\r{(i*10):^5}% [{i*"*"} {(fac-i)*"-"}]time:{(time.time()-satat):.3f}',end='')
time.sleep(1)