用户登录验证码生成,用户登录验证码生成

   日期:2024-01-17     浏览:153    评论:0    

 

用户登录验证码生成

 
一、视图代码
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>
,
一、视图代码
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>
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服