# 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))
极验科技验证码参考文档python
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)