django框架之验证码生成示例(代码片段)

linu linu     2023-01-05     796

关键词:

一、生成随机颜色的图片

1)前端代码展示

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.min.css">
    <script src="/static/jquery-3.1.1.js"></script>
    <title>登录页面</title>
</head>
<body>


<div class="container-fluid">
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <h1>登录</h1>
            <form>
                <div class="form-group">
                    <label for="">用户名</label>
                    <input type="text" id="id_name" class="form-control">
                </div>

                <div class="form-group">
                    <label for="">密码</label>
                    <input type="password" id="id_pwd" class="form-control">
                </div>

                <div class="form-group">
                    <label for="">验证码</label>
                    <div class="row">
                        <div class="col-lg-6">
                            <input type="text" id="code" class="form-control">
                        </div>
                        <div class="col-lg-6">
                            <img height="35" width="250" src="/get_code/" alt="">
                        </div>
                    </div>
                </div>
                <input type="button" value="登录" class="btn btn-danger">
            </form>

        </div>
    </div>
</div>

</body>
</html>
login.html

提交方式,基于ajax提交

2)生成随机颜色的图片

技术分享图片
def get_random_color():
    ‘‘‘生成随机颜色的图片‘‘‘
    import random
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
get_random_color

3)验证码函数,写入图片,读取图片返回给前端

技术分享图片
def get_code(request):
    from PIL import Image
    img = Image.new(RGB,(35,250),color=get_random_color())
    with open(code.png,wb) as f:    # 造成随机颜色的图片
        img.save(f)

    with open(code.png,rb) as f:    # 读取图片,给前端
        data=f.read()

    return HttpResponse(data)
get_code

技术分享图片

二、在随机验证码图片内写入文字.(重点)

随机生成的验证码图片,保存于内存。图片内的文字保存于session(用于登录验证)

技术分享图片
def get_code(request):
    from PIL import Image, ImageDraw, ImageFont
    from io import BytesIO  # 生成的验证码存放于内存
    import random
    img = Image.new("RGB", (270, 40), color=get_random_color())
    # (270, 40) 指定生成的图片的长度,高度
    draw = ImageDraw.Draw(img)
    # kumo.ttf 文字样式,网上下载ttf
    kumo_font = ImageFont.truetype("static/font/kumo.ttf", size=32)     # 引入字体

    valid_code_str = ""
    for i in range(5):
        random_num = str(random.randint(0, 9))  # 随机一个数字
        random_low_alpha = chr(random.randint(95, 122)) # 随机一个小写字母
        random_upper_alpha = chr(random.randint(65, 90))    # 随机一个大写字母
        random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])     # 从上面的3个选择一个出来
        draw.text((i * 50 + 20, 5), random_char, get_random_color(), font=kumo_font)   # (i * 50 + 20, 5) 写字母的时候便宜

        # 保存验证码字符串
        valid_code_str += random_char

    print("valid_code_str", valid_code_str)
    f = BytesIO()   # 生成一个对象,保存于内存
    img.save(f, "png")  # 验证码图片保存于内存
    data = f.getvalue()
    request.session[code]=valid_code_str  # 验证码保存于session中

    return HttpResponse(data)
get_code

技术分享图片

 三、加入ajax请求登录

1)url视图函数

技术分享图片
from django.conf.urls import url
from django.contrib import admin
from mybbs import views
urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^login/, views.login),
    url(r^get_code/, views.get_code),
]
url.py

2)login页面

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.min.css">
    <script src="/static/jquery-3.1.1.js"></script>
    <title>登录页面</title>
</head>
<body>


<div class="container-fluid">
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <h1>登录</h1>
            <form>
                % csrf_token %
                <div class="form-group">
                    <label for="">用户名</label>
                    <input type="text" id="id_name" class="form-control">
                </div>

                <div class="form-group">
                    <label for="">密码</label>
                    <input type="password" id="id_pwd" class="form-control">
                </div>

                <div class="form-group">
                    <label for="">验证码</label>
                    <div class="row">
                        <div class="col-lg-6">
                            <input type="text" id="code" class="form-control">
                        </div>
                        <div class="col-lg-6">
                            <img height="35" width="250" src="/get_code/" alt="">
                        </div>
                    </div>
                </div>
                <input type="button" id="submit" value="登录" class="btn btn-danger">
            </form>

        </div>
    </div>
</div>


<script>
    $("#submit").click(function () 
        $.ajax(
            url: /login/,
            type: post,
            data: 
                name: $("#id_name").val(),
                pwd: $("#id_pwd").val(),
                code: $("#code").val(),
                csrfmiddlewaretoken: csrf_token
            ,
            success: function (data) 
                console.log(data)
            
        )
    )
</script>
</body>
</html>
login.html

 

3)验证码相关函数

技术分享图片
def get_random_color():
    ‘‘‘生成随机颜色的图片‘‘‘
    import random
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))


def get_code(request):
    from PIL import Image, ImageDraw, ImageFont
    from io import BytesIO  # 生成的验证码存放于内存
    import random
    img = Image.new("RGB", (270, 40), color=get_random_color())
    # (270, 40) 指定生成的图片的长度,高度
    draw = ImageDraw.Draw(img)
    # kumo.ttf 文字样式,网上下载ttf
    kumo_font = ImageFont.truetype("static/font/kumo.ttf", size=32)     # 引入字体

    valid_code_str = ""
    for i in range(5):
        random_num = str(random.randint(0, 9))  # 随机一个数字
        random_low_alpha = chr(random.randint(95, 122)) # 随机一个小写字母
        random_upper_alpha = chr(random.randint(65, 90))    # 随机一个大写字母
        random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])     # 从上面的3个选择一个出来
        draw.text((i * 50 + 20, 5), random_char, get_random_color(), font=kumo_font)   # (i * 50 + 20, 5) 写字母的时候便宜

        # 保存验证码字符串
        valid_code_str += random_char

    print("valid_code_str", valid_code_str)
    f = BytesIO()   # 生成一个对象,保存于内存
    img.save(f, "png")  # 验证码图片保存于内存
    data = f.getvalue()
    request.session[code]=valid_code_str  # 验证码保存于session中

    return HttpResponse(data)
验证码相关请求函数

4)login函数请求(判断ajax)

技术分享图片
from django.contrib import auth
def login(request):
    if request.is_ajax():
        name=request.POST.get(name)
        pwd=request.POST.get(pwd)
        code=request.POST.get(code)

        if code.upper()== request.session[code].upper():
            user=auth.authenticate(request,username=name,password=pwd)
            if user:
                return HttpResponse(ok)
            else:
                return HttpResponse(用户名或密码错误)
        else:
            return HttpResponse(验证码错误)

    return render(request,login.html)
Views.login

 

django之验证码(代码片段)

...三段:生成验证码——显示验证码——验证验证码、1fromdjango.shortcutsimportrender,HttpResponse2fromdjango.httpimportJsonResponse3fromdjango.contribimportauth4fromgeetestimportGeetestLib56#Createyourviewshere.78#使用极验滑动验证码的登陆9deflogin(request):10ifrequest.m... 查看详情

django之验证码实现(代码片段)

1.django-simple-captcha模块安装django-simple-captchapipinstalldjango-simple-captchapipinstallPillow注册和注册app一样,captcha也需要注册到settings中。同时它也会创建自己的数据表,因此还需要数据同步。#settings.pyINSTALLED_APPS=[...'captcha' 查看详情

thinkphp框架之验证码

TP框架中ThinkVerify类可以支持验证码的生成和验证功能。具体文件:ThinkPHP/Library/Think/Verify.class.php生成验证码下面是最简单的方式生成验证码:$Verify=newThinkVerify();$Verify->entry();上面的代码会生成默认的验证码图片并输出,显示... 查看详情

python一键生成验证码并部署(django)(代码片段)

文章目录生成验证码在Django当中部署生成验证码生成验证码我们主要使用到三个东西在Pillow当中Image(),使用它的Image.new()方法创建一个图片的画布ImageDraw的Draw()方法的text()和point()方法进行绘图... 查看详情

django框架之form组件(代码片段)

1.Django的Form主要具有以下几大功能:生成HTML标签验证用户数据(显示错误信息)HTMLForm提交保留上次提交的数据初始化页面显示内容2.第一个案例:#第一步:创建Form类fromdjango.formsimportFormfromdjango.formsimportwidgetsfromdjango.formsimportfieldsclassMy... 查看详情

django验证码实现(代码片段)

django验证码的使用:验证码的作用:用于人机识别。验证码###验证码:defcode_str(request):fromPILimportImagefromPILimportImageDraw,ImageFontfromioimportBytesIO#生成随机字符串,一个数组的形式importrandomdefget_random_color():return(random.randint(0 查看详情

django之集成阿里云通信(发送手机短信验证码)(代码片段)

python3+django2.0集成“阿里云通信”服务:(SDK文档地址:https://help.aliyun.com/document_detail/55491.html?spm=5176.10629532.106.3.2fe01cbeAp0iFO)步骤1:  在阿里云“短信服务”中创建一个签名步骤2:  在阿里云“短信服务”中创建一个短信... 查看详情

《springsecurity框架专题》-06验证码认证(代码片段)

文章目录1.验证码流程2.验证码生成3.前端验部分的代码4.验证码校验1.验证码流程验证码流程图解析:客户端打开登陆页的时候就要发送一个生成图片验证码的请求服务端接受请求,就要随机生成验证码图片,将图片验证码响应... 查看详情

)tf框架之实现验证码识别(代码片段)

 这里实现一个用神经网络(卷积神经网络也可以)实现验证码识别的小案例,主要记录本人做这个案例的流程,不会像之前那么详细,主要用作个人记录用。。。这里是验证码的四个字母,被one-hot编码后形成的四个一维数组,... 查看详情

django生成验证码或二维码pillow模块(代码片段)

一、安装PILPIL:PythonImagingLibrary,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,API也非常简单易用。?PIL模块只支持到Python2.7,许久没更新了,在python3.*版本上使用Pillow模块?安装Pillow?pipinstallpillow二、pillow基本使... 查看详情

django实现验证码(代码片段)

简单搞定生成验证码:1.views.pyfromioimportBytesIOimportrandomfromPILimportImage,ImageDraw,ImageFontfromutils.check_codeimportcreate_validate_codedefcheckCode(request):returnrender(request,‘code_test.html‘)defcodetest(request):##获取随机颜色的函数#defget_random_color():#returnr... 查看详情

一百一十三:cms系统之图形验证码生成(代码片段)

 安装Pillow库,用于生成图形验证码:pipinstallPillow字体文件来源生成一个验证码图片importrandomimportstringfromPILimportImage,ImageDraw,ImageFont#Image:一个画布#ImageDraw:一个画笔#ImageFont:画笔的字体classCaptcha(object):"""生成图形验证码"""num... 查看详情

js经典案例之随机生成验证码(代码片段)

<!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title></title> <style> </style> </head> <body> <div> <h1&g 查看详情

tyrion中文文档(含示例源码)(代码片段)

...持多个WEB框架的Form表单验证组件,其完美的支持Tornado、Django、Flask、BottleWeb框架。Tyrion主要有两大重要动能:表单验证生成HTML标签保留上次提交内容对于表单验证,告别书写重复的正则表达式对用户提交的数据进行验证的工作... 查看详情

shiro整合springboot之图片验证码实现(代码片段)

Shiro整合Springboot之图片验证码实现开发控制器放行验证码新增验证码工具类开发页面修改认证流程开发控制器/***验证码方法*/@RequestMapping("getImage")publicvoidgetImage(HttpSessionsession,HttpServletResponseresponse)throwsIOException//生成验... 查看详情

django框架之基础入门(代码片段)

django是一款MVT的框架 一、基本过程  1、创建项目:django-adminstartproject项目名称  2、编写配置文件settings.py(数据库配置、时区、后台管理中英文等)  3、创建应用:pythonmanage.pystartapp应用名称  4、编写模型类:mode... 查看详情

servlet-随机生成验证码(初级版本)(代码片段)

Servlet之验证码(初级)需求:    使用Servlet向页面响应验证码,并且点击验证码或者"看不清楚,换一张"可以刷新验证码需求分析:Servlet中需要完成的需求:   验证码的本质:就是一张图片   使用Servlet向页面响... 查看详情

django框架之介绍与启动(代码片段)

文章目录前言Django概述Django安装Django的部分常用命令Django的部分配置文件介绍Django的运行示例配置内网访问前言因为短学期需要用Django框架来做个NLP的系统用于展示,因此记录一下学习到的相关内容,也是为了到时候需... 查看详情