Django中使用geetest实现滑动验证

下载第三方模块

导入模块social-auth-app-django 和geetest 提前去官网下载gt.js或者引入http://static.geetest.com/static/tools/gt.js

pip install social-auth-app-django
pip install geetest

在django引用

1.目录结构

2.html层

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <style>
        .error{
    color: red;
    }
    </style>
</head>
<body>
<h3>登录</h3>

<!-- 为使用方便,直接使用jquery.js库,如您代码中不需要,可以去掉 -->
<script type="text/javascript" src="/static/bootstrap/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="/static/bootstrap/js/bootstrap.js"></script>
<!-- 引入封装了failback的接口--initGeetest -->
<script src="http://static.geetest.com/static/tools/gt.js"></script>

 <div class="container">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <div class="panel panel-default login">
                    <div class="panel-heading">
                        <p class="h3">登录&nbsp;&nbsp;博客账号</p>
                        <p>请在下面的输入框中输入您的用户名和密码</p>
                    </div>
                    <div class="panel-body">
                        <div>
                            {% csrf_token %}
                            <div class="form-group">
                                <input type="text" class="form-control input-lg" id="user" placeholder="用户名">
                            </div>
                            <div class="form-group">
                                <input type="password" class="form-control input-lg" id="pwd" placeholder="密码">
                            </div>
                            <div class="form-group popup-div">
                                <!-- 放置极验的滑动验证码 -->
                                <div id="popup-captcha"></div>

                            </div>
                            <div class="form-group">
                                <button class="btn btn-block btn-primary btn-lg" id="login-button" >登录</button>
                            </div>

                            <span id="error" class="pull-right"></span>
                        </div>

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

    </div>

<script>
    //发送数据
    var handlerPopup = function (captchaObj) {
    // 成功的回调
    captchaObj.onSuccess(function () {
        var validate = captchaObj.getValidate();
        var username = $("#user").val();
        var password = $("#pwd").val();
        $.ajax({
            url: "/blog/geelogin/", // 进行二次验证
            type: "post",
            dataType: "json",
            data: {
                username: username,
                password: password,
                csrfmiddlewaretoken: $("[name=‘csrfmiddlewaretoken‘]").val(),
                geetest_challenge: validate.geetest_challenge,
                geetest_validate: validate.geetest_validate,
                geetest_seccode: validate.geetest_seccode
            },
            success: function (data) {
                if(data.status){

                    $(‘#error‘).text(data.msg).css({‘margin-left‘:‘10px‘,‘color‘:‘red‘})
                }else{
                    location.href = data.msg;
                }
            }
        });
    });

    //绑定事件显示滑动验证码
    $("#login-button").click(function () {
        captchaObj.show();
    });
    // 将验证码加到id为captcha的元素里
    captchaObj.appendTo("#popup-captcha");
    // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
};
    // 验证开始需要向网站主后台获取id,challenge,success(是否启用failback)
    $.ajax({
        url: "/blog/pc-geetest/register?t=" + (new Date()).getTime(), // 加随机数防止缓存
        type: "get",
        dataType: "json",
        success: function (data) {
            // 使用initGeetest接口
            // 参数1:配置参数
            // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
            initGeetest({
                gt: data.gt,
                challenge: data.challenge,
                product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
                offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注
                // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config
            }, handlerPopup);
        }
    });

</script>
</body>
</html>

3.urls.py

from django.contrib import admin
from django.urls import path
from django.urls import re_path,include

from blog import views

urlpatterns = [
    # path(‘admin/‘, admin.site.urls),
    # re_path(r"blog/", include((‘blog.urls‘, ‘blog‘))),  # 分发
    path(‘login/‘,views.login),
    path(‘get_valid_img/‘,views.get_validCode_img),
    path(‘index/‘,views.index),
    path(‘geeindex/‘, views.geeindex),
    re_path(r"^pc-geetest/register",views.get_geetest),
    # re_path(r‘^pc-geetest/validate$‘,views.pcvalidate),
    # re_path(r‘^pc-geetest/ajax_validate‘, views.pcajax_validate),
    path(‘geelogin/‘,views.geelogin),

]

4.views.py

from django.shortcuts import render,HttpResponse

# Create your views here.
from django.http import JsonResponse
from django.contrib import auth

pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"
pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4"

def geelogin(request):
    """
    登录
    :param request:
    :return:
    """
    if request.method == ‘POST‘:
        ret = {
            ‘status‘: None,
            ‘msg‘: ‘‘,
        }

        username = request.POST.get("username")
        password = request.POST.get("password")

        gt = GeetestLib(pc_geetest_id, pc_geetest_key)
        challenge = request.POST.get(gt.FN_CHALLENGE, ‘‘)
        validate = request.POST.get(gt.FN_VALIDATE, ‘‘)
        seccode = request.POST.get(gt.FN_SECCODE, ‘‘)
        status = request.session[gt.GT_STATUS_SESSION_KEY]
        user_id = request.session["user_id"]

        if status:
            result = gt.success_validate(challenge, validate, seccode, user_id)
        else:
            result = gt.failback_validate(challenge, validate, seccode)

        if result:
            # 验证码正确

            # 利用auth模块做用户名和密码的校验
            user = auth.authenticate(username=username, password=password)
            if user:
                # 用户名密码正确
                # 给用户做登录
                auth.login(request, user)  # 将登录用户赋值给 request.user
                ret["msg"] = "/blog/index/"
            else:
                # 用户名密码错误
                ret["status"] = 1
                ret["msg"] = "用户名或密码错误!"
        else:
            ret["status"] = 1
            ret["msg"] = "验证码错误"

        return JsonResponse(ret)

    else:
        return render(request,‘geelogin.html‘)

def index(request):
    return render(request, ‘index.html‘)

from geetest import GeetestLib

# 处理极验 获取验证码的视图
def get_geetest(request):
    user_id = ‘test‘
    gt = GeetestLib(pc_geetest_id, pc_geetest_key)
    status = gt.pre_process(user_id)
    request.session[gt.GT_STATUS_SESSION_KEY] = status
    request.session["user_id"] = user_id
    response_str = gt.get_response_str()
    return HttpResponse(response_str)

5.index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h3>首页{{ request.user }}</h3>
</body>
</html>

  

原文地址:https://www.cnblogs.com/xiao-apple36/p/10562372.html

时间: 2024-11-04 19:32:41

Django中使用geetest实现滑动验证的相关文章

Django中的Form表单验证

回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错误信息的字典,并会遍历类的所有属性(对应前端待验证的输入域),调用各自的验证方法,将错误信息(两类,必要与否以及格式正确与否)存入字典,并得出最终的验证结果.在使用时,需要定义继承自Form基类不同的Form类,以对应有着不同输入域的Form表单.在拿到前端给的字典前,要先初始化自定义From类,直

django图片验证码和滑动验证

1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install Pillow 注册 和注册 app 一样,captcha 也需要注册到 settings 中.同时它也会创建自己的数据表,因此还需要数据同步. # settings.py INSTALLED_APPS = [ ... 'captcha', ] # 执行命令进行数据迁徙,会发现数据库中多了一个 capt

VUE中使用geetest滑动验证码

一,准备工作:服务端部署 下载文件gt.gs: https://github.com/GeeTeam/gt3-python-sdk 需要说明的是这里的gt.js文件,它用于加载对应的验证JS库. 1.引入初始化函数 main.js import '../static/global/gt.js' 2.调用初始化函数进行初始化 api.js // 滑动验证码api export const getGeetest = ()=> { return Axios.get('captcha_check/')

Django在CBV中使用,用户登录验证组件

源地址:https://blog.csdn.net/Jamin2018/article/details/79047703 1.CBV模式中,由于View中的视图为类,所有不能像FBV一样使用装饰器,故可以继承一个自定义的类,这个类的功能的验证用户有没有登录,需要登录才能访问这个类 2.utils文件夹中创建mixin_utils.py文件 3..mixin_utils.py代码: from django.contrib.auth.decorators import login_required

在Django中定制身份验证

在Django中定制身份验证 Django附带的认证对于大多数常见情况来说已经足够了,但您可能需要通过开箱即用的默认设置才能满足需求. 要为您的项目定制身份验证,需要了解提供的系统的哪些点可扩展或可替换. 身份验证后端为用户模型存储的用户名和密码需要针对与Django默认不同的服务进行身份验证时提供了一个可扩展的系统. 您可以给您的模型定制可以通过Django的授权系统进行检查的权限. 您可以扩展默认的用户模型,或者替换完全自定义的模型. 其他验证来源 您可能有时需要挂接到另一个身份验证来源 -

Spring Boot 整合滑动验证

极验是一种利用生物特征与人工智能技术解决人机交互安全问题的技术,旨在解决安全验证问题,例如:账号登录.短信验证.批量注册等,目前极验.网易易盾比较出众. 在这里主要使用的极验Geetest和springboot 框架整合. 1.首先到极验官网注册账号获取ID和KEY,这里赘述. 2.到极验官网下载,使用SDK,点击下载,如果你使用时Git工具, #git clone https://github.com/GeeTeam/gt3-java-sdk.git 3.引入SDK到Springboot项目中

Django中的Model继承

Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由子 model 呈现. Django中有三种继承关系: 1.通常,你只是想用父 model 来保存那些你不想在子 model 中重复录入的信息.父类是不使用的也就是不生成单独的数据表,这种情况下使用抽象基类继承 Abstract base classes. 2.如果你想从现有的Model继承并让每个

Django中的CSRF

CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御.然而,对于大多数人来说,CSRF 却依然是一个陌生的概念.即便是大名鼎鼎的 Gmail, 在 2007 年底也存在着 C

转:django中session的实现机制

转:www.jianshu.com 要理解session,首先要搞清楚cookie的概念.由于http是无状态的,服务器不能记住用户的信息状态,因此若由同一个客户端发起的多条请求,服务器不能辨别这些请求来自哪个用户.http无状态的限制为web应用程序的设计带来了许多不便,购物网站中的"购物车"功能就是一个很好的例子,当用户把商品放进购物车后,客户端必须要保存购物车的状态,否则当用户下次浏览网站时,购物车拥有的商品状态便不复存在.客户端和服务器必须有通信的媒介,方便服务器追踪客户端的状