用户登录验证码生成
一、视图代码
import random def get_random_color(): """ 获取随机图片颜色 :return: """ return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255) def valid_img(request): # 方式一 # with open("111.png", "rb") as f: # data = f.read() # 方式二 # from PIL import Image # img = Image.new("RGB", (250, 40), get_random_color()) # f = open("validcode.png", "wb") # img.save(f, "png") # with open("validcode.png", "rb") as f: # data = f.read() # 方式三 # from io import BytesIO # img = Image.new("RGB", (250, 40), get_random_color()) # f=BytesIO() # img.save(f, "png") # data = f.getvalue() # 方式四 from io import BytesIO from PIL import Image, ImageDraw, ImageFont img = Image.new("RGB", (250, 40), get_random_color()) # 新建图片大小为250*40 draw = ImageDraw.Draw(img) # 可以在该图片对象上写内容 font = ImageFont.truetype("statics/font/KaushanScript-Regular.ttf", 30) # 指定字体,需自行下载字体文件 keep_str = "" for i in range(5): # 获取随机数 random_num = str(random.randint(0, 9)) random_low_alpha = chr(random.randint(97, 122)) random_upper_alpha = chr(random.randint(65, 90)) random_char = random.choice([random_num, random_low_alpha, random_upper_alpha]) draw.text((20 + i * 35, 0), random_char, get_random_color(), font=font) keep_str += random_char # 噪点噪线 # width=250 # height=40 # for i in range(10): # x1=random.randint(0,width) # x2=random.randint(0,width) # y1=random.randint(0,height) # y2=random.randint(0,height) # draw.line((x1,y1,x2,y2),fill=get_random_color()) # # for i in range(100): # draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color()) # x = random.randint(0, width) # y = random.randint(0, height) # draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color()) request.session["keep_str"] = keep_str f = BytesIO() img.save(f, "png") data = f.getvalue() return HttpResponse(data)
二、模板文件代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css"> <style> .con{ margin-top: 120px; } </style> </head> <body> <div class="container"> <div class="row con"> <form action="/login/" method="post"> {% csrf_token %} <div class="form-group col-sm-6 col-sm-offset-3"> <label for="exampleInputEmail1">用户名</label> <input type="text" class="form-control" id="exampleInputEmail1" placeholder="用户名"> </div> <div class="form-group col-sm-6 col-sm-offset-3"> <label for="exampleInputPassword1">密码</label> <input type="password" class="form-control" id="exampleInputPassword1" placeholder="密码"> </div> <div class="form-group col-sm-6 col-sm-offset-3"> <label for="exampleInputFile">验证码</label> <div class="row"> <div class="col-sm-6"> <input type="text" id="exampleInputFile" class="form-control col-sm-3"> </div> <div class="col-sm-4"> {# <img src="/static/images/111.png" alt="">#} <img src="/valid_img/" alt=""> </div> </div> </div> <div class="form-group col-sm-6 col-sm-offset-3"> <button type="submit" class="btn btn-defaultcol-sm-offset-3">登录</button> </div> </form> </div> </div> </body> </html>