随机验证码生成 与 生成随机字母和数字,缓存存随机验证码
生成随机背景颜色
import random
def random_num(min_num, max_num): num = random.randint(min_num, max_num) num1 = random.randint(min_num, max_num) num2 = random.randint(min_num, max_num) return (num,num1,num2)
生成六位数随机大小写字母和数字
方法一:
import random
def six_code(): letter = '' for i in range(6): letter_lower = chr(random.randint(65, 90)) # 随机长生一个大写字母 letter_capital = chr(random.randint(97, 122)) # 随机产生一个小写字母 num = str(random.randrange(10)) # 随机产生一个数字 random_lett = letter_lower + letter_capital + num # 随机产生大小写字母与数字 letter += random.choice(random_lett) # 从大小写字母与数字中随机选一个 return letter
方法二:
import random,string def get_rangdom_letter(): src = string.ascii_letters + string.digits random_num = random.sample(src,5) n = '' for i in random_num: n += i return n
随机六位数验证码生成
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
def login_code(request): img = Image.new('RGB',(303, 33),color=random_num(150,250)) # 生成画板 img_draw = ImageDraw.Draw(img) # 在哪块画板上画 img_font = ImageFont.truetype( font="static/font/kumo.ttf", size=30 ) # 设置字形 six_num_code = six_code() # 产生了一个六位数的随机字符 request.session["img_code"] = six_num_code for i,v in enumerate(six_num_code): img_draw.text((55+i*33, 0), v, random_num(0,130), font=img_font) # 在画板上写字 bf = BytesIO() # 生成缓存 img.save(bf, "png") # 将画板保存在缓存里 data = bf.getvalue() # 从缓存里取出来 return HttpResponse(data)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from blog import models from PIL import Image,ImageDraw,ImageFont from io import BytesIO import random,string # 随机颜色 def get_random_color(): return ( random.randint(0,100), random.randint(0, 100), random.randint(0, 100), ) # 字体随机颜色 def get_random_font(): return ( random.randint(200,255), random.randint(200, 255), random.randint(200, 255), ) # 随机字母数字结合 def get_rangdom_letter(): src = string.ascii_letters + string.digits random_num = random.sample(src,5) n = '' for i in random_num: n += i return n # 取随机字母数字结合图 def get_valid_code(request): # 生成一个随机背景颜色图片 img = Image.new('RGB',(120,35),color=get_random_color()) # 拿到画笔,画背景颜色 img_draw = ImageDraw.Draw(img) # 字体设置 font = ImageFont.truetype('static/font/ss.TTF',size=25) # 为背景颜色添加字体 随机字母数字 img_draw.text((20,0), get_rangdom_letter() ,get_random_font(),font=font) f = BytesIO() img.save(f,'png') # 图片放入内存中 data = f.getvalue() return HttpResponse(data) from django.contrib import auth # 登录认证 def login(request): if request.method == 'GET': return render(request,'login.html') elif request.method == 'POST': name = request.POST.get('name') pwd = request.POST.get('pwd') # models.UserInfo.objects.create_superuser(username=name, password=pwd,blog_id=1,email='127@qq.com') print(name,pwd) user = auth.authenticate(request,username=name,password=pwd) print(user) if user: print(111111111) auth.login(request,user) return JsonResponse('登陆成功') else: return redirect('/login/')