码迷,mamicode.com
首页 > 其他好文 > 详细

图片验证码

时间:2018-12-03 17:54:43      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:one   ever   jquer   字符   draw   rip   primary   ima   with   

1.前端代码

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="/static/jquery-3.3.1.js"></script>
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <title>Title</title>
</head>
<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <form>
                <div class="form-group">
                    <label for="name">用户名</label>
                    <input type="text" name="name" id="name" class="form-control">
                </div>
                <div class="form-group">
                    <label for="password">密码</label>
                    <input type="password" name="password" id="password" class="form-control">
                </div>
                <div class="form-group">
                    <label for="valid_code">验证码</label>
                    <div class="row">
                        <div class="col-md-6">
                            <input type="text" id="valid_code" class="form-control">
                        </div>
                        {#写一个获取验证码的路由#}
                        <img src="/get_valid_code/" alt="" height="34" width="200" id="img_code">
                    </div>
                </div>
            </form>
            <button class="btn btn-primary">提交</button>
        </div>
    </div>
</div>
</body>
<script>
    $(#img_code).click(function () {
        $(#img_code)[0].src+=?;
    })
</script>
</html>
View Code

2.后端代码

技术分享图片
from django.shortcuts import render, HttpResponse, reverse, redirect


# Create your views here.
def login(request):
    if request.method == GET:
        return render(request, login.html)


import random
def get_random_color():
    return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))


from io import BytesIO
from PIL import Image, ImageDraw, ImageFont
def get_valid_code(request):
    # 第一种方式
    # with open(‘static/img/315557.jpg‘, ‘rb‘) as f:
    #     # 图片二进制
    #     data = f.read()
    # return HttpResponse(data)

    # 第二种方式,随机生成一张图片
    # 第一个参数是模式:RGB,第二个参数是图片大小,第三个参数是图片颜色
    # img = Image.new(‘RGB‘, (200, 34), color=get_random_color())
    #
    # with open(‘valid_code.png‘, ‘wb‘) as f:
    #     # Image已经把保存方式封装好了,直接这么用就行了,第一个参数是空文件,第二个参数图片格式
    #     img.save(f, ‘png‘)
    # with open(‘valid_code.png‘, ‘rb‘) as f:
    #     data = f.read()
    # return HttpResponse(data)

    # 第三种方式
    # 在内存中生成一个空文件
    # img=Image.new(‘RGB‘,(200,34),color=get_random_color())
    # f=BytesIO()
    # #把图片保存到f中,放到内存中,存取比较快,而且有自动清理
    # img.save(f,‘png‘)
    # data=f.getvalue()
    # return HttpResponse(data)

    # # 第四种方式,在图片上写文字
    # img = Image.new(‘RGB‘, (200, 34), get_random_color())
    # img_draw = ImageDraw.Draw(img)
    # # img_draw第一个参数,xy的坐标(第一个是x坐标,正数则往右拉。第二个是y坐标,整数则往下拉),第二个参数:要写的文字,第三个参数:写文字的颜色,第四个参数:字体
    # # 不同的字体是不同的ttf文件
    # # 生成一个字体对象,第一个参数是字体文件的路径,第二个参数是字体的大小
    # font = ImageFont.truetype(‘static/font/ss.TTF‘, size=22)
    # img_draw.text((0, 0), ‘python‘, get_random_color(), font=font)
    # f=BytesIO()
    # img.save(f,‘png‘)
    # data=f.getvalue()
    # return HttpResponse(data)

    #第五种方式,随机生成验证码
    # 弄一个循环,循环5次,每次随机写一个(数字,大写,小写字母)
    font=ImageFont.truetype(static/font/ss.TTF,size=22)
    img=Image.new(RGB,(200,34),get_random_color())
    img_draw=ImageDraw.Draw(img)
    for i in range(5):
        char_num = random.randint(0, 9)
        char_lower = chr(random.randint(97, 122))
        char_upper = chr(random.randint(65, 90))
        char_str = str(random.choice([char_num, char_upper, char_lower]))
        #每次循环,随机写出的字符都错开一些
        img_draw.text((i*25+20,0),char_str,get_random_color(),font=font)
    f=BytesIO()
    img.save(f,png)
    data=f.getvalue()
    return HttpResponse(data)
View Code

 

图片验证码

标签:one   ever   jquer   字符   draw   rip   primary   ima   with   

原文地址:https://www.cnblogs.com/xufengnian/p/10059772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!