zoukankan      html  css  js  c++  java
  • 1 如何引用第三方滑动验证码

    参考:极验科技:https://docs.geetest.com/install/deploy/server/python

    1 安装requests

      pip install requests

    2 拷贝你在网站上下载好的软件包下面的sdk下面的geetest文件到你的项目utils目录下面

    3 拷贝代码到views.py

    from utils.geetest import GeetestLib # 导入滑动验证码的模块
    #请在官网申请ID使用,示例ID不可使用
    pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"
    pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4"

    #pcgetcaptcha就是初始化(API1),获取流水标识并设置状态码

    def pcgetcaptcha(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)

    4 把二次验证的ap12放到登录函数的里面

     1 class LoginView(views.View):
     2     def get(self, request):
     3         return render(request, "login.html")
     4 
     5     def post(self, request):
     6         next_url = request.GET.get("next","/index/")
     7         username = request.POST.get("username")
     8         pwd = request.POST.get("password")
     9         # v_code=request.POST.get("vcode","").upper()  #如果用户不写验证码就是空
    10         # 滑动验证码开始
    11         gt = GeetestLib(pc_geetest_id, pc_geetest_key)
    12         challenge = request.POST.get(gt.FN_CHALLENGE, '')
    13         validate = request.POST.get(gt.FN_VALIDATE, '')
    14         seccode = request.POST.get(gt.FN_SECCODE, '')
    15         status = request.session[gt.GT_STATUS_SESSION_KEY]
    16         user_id = request.session["user_id"]
    17         if status:
    18             result = gt.success_validate(challenge, validate, seccode, user_id)
    19         else:
    20             result = gt.failback_validate(challenge, validate, seccode)
    21             #滑动验证码结束
    22 
    23 
    24         # if v_code==request.session.get("v_code"):
    25         if result:
    26 
    27             user_obj = auth.authenticate(username=username, password=pwd)
    28             if user_obj:
    29                 auth.login(request, user_obj)  # auth认证登录
    30                 return redirect(next_url)
    31             else:
    32                 return render(request, "login.html", {"error_msg": "用户名或密码错误"})
    33         else:
    34             return render(request, "login.html", {"error_msg": "验证码错误"})
    View Code

    5  urls里面添加url

    这个路径是上面api1的路径
    url(r'^ooxx/$', views.pcgetcaptcha),

    6 修改login登录页面代码

    <script src="/static/plugins/jquery-3.3.1.min.js"></script>
    {#<script src="/static/js/login.js"></script>#}
    <!-- 引入封装了failback的接口--initGeetest -->
    <script src="http://static.geetest.com/static/tools/gt.js"></script>
    <!--滑动验证码的ajax操作-->
    <script>
        var handlerEmbed = function (captchaObj) {
            $("#login-button").click(function (e) {
                var validate = captchaObj.getValidate();
                if (!validate) {
                    $("#notice")[0].className = "show";
                    setTimeout(function () {
                        $("#notice")[0].className = "hide";
                    }, 2000);
                    e.preventDefault();
                }
            });
            // 将验证码加到id为captcha的元素里,同时会有三个input的值:geetest_challenge, geetest_validate, geetest_seccode
            captchaObj.appendTo("#embed-captcha");
            captchaObj.onReady(function () {
                $("#wait")[0].className = "hide";
            });
            // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
        };
        $.ajax({
            // 获取id,challenge,success(是否启用failback)
            url: "/ooxx/?t=" + (new Date()).getTime(), // 加随机数防止缓存
            type: "get",
            dataType: "json",
            success: function (data) {
                // 使用initGeetest接口
                // 参数1:配置参数
                // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
                initGeetest({
                    gt: data.gt,
                    challenge: data.challenge,
                    product: "embed", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
                    offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注
                    // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config
                }, handlerEmbed);
            }
        });
    </script>
    View Code

    7 修改存放验证码的div的id和button按钮的id,都要跟上面的js里面的一致

             <div class="form-group" id="embed-captcha">
                        <p id="wait" class="show">正在加载验证码......</p>
                        <p id="notice" class="hide">请先拖动验证码到相应位置</p>
    
              </div>
              
    button按钮增加一个id名字跟上面的一致
    <button type="submit" class="btn btn-success" id="login-button">登陆</button>
  • 相关阅读:
    [Git]01 如何安装和配置
    [ext4]09 磁盘布局
    [ext4]磁盘布局
    [ext4]01 磁盘布局
    [工具技巧] SecureCRT使用技巧 V1.0
    [内存管理]管理图解v0.1 v0.2 v0.3
    内核源码目录结构
    共享内存删除的安全“陷阱”
    基于header的一些常用指令详解
    18、前端知识点--自定义指令
  • 原文地址:https://www.cnblogs.com/huningfei/p/9692501.html
Copyright © 2011-2022 走看看