下载极验科技sdk模块压缩包>>>https://docs.geetest.com/install/deploy/server/csharp

按照Django对应项目例子修改

1.用pip3 install geetest安装geetest库文件 命令行安装

2.在urls里面写一个获取极验验证码的对应关系

3.引入极验科技的模块接口 :  <script src="http://static.geetest.com/static/tools/gt.js"></script>

HTML页面的代码:

  form表单代码块:

1 <form action="/login/" method="post">
 2     {% csrf_token %}
 3     <div class="col-md-4 col-md-offset-4">
 4         <div class="form-group">
 5         <p>用户名:<input type="text" id="username" name="user" class="form-control"></p>
 6         <span id="e1"></span>
 7     </div>
 8     <div class="form-group">
 9         <p>密码:<input type="password" id="password" name="psd" class="form-control"></p>
10     </div>
11     <div class="form-group">
12           <!--验证码加载显示区域 -->
13         <div id="virycode"></div>
14     </div>
15         <div class="form-group" >
16         <button type="button" class="btn btn-success" id="login_to">登录</button>
17             <span class="login-error"></span>
18     </div>
19     </div>
20     
21 </form>

验证码加载显示区域会去找极验的jQuery代码,登录的button就用普通button类型,因为还需要绑定click点击事件

1 <!-- 引入封装了failback的接口--initGeetest -->
2 <script src="http://static.geetest.com/static/tools/gt.js"></script>

通过jQuery取值,ajax传递数据:

1 <script>
 2     var handlerPopup = function (captchaObj) {
 3         // 成功的回调
 4         captchaObj.onSuccess(function () {
 5             var validate = captchaObj.getValidate();
 6             // 1. 取到用户填写的用户名和密码 -> 取input框的值
 7             var username = $("#username").val();
 8             var password = $("#password").val();
 9             $.ajax({
10                 url: "/login/", // 进行二次验证
11                 type: "post",
12                 dataType: "json",
13                 data: {
14                     username: username,   //把用户名、密码 数据传到后台去
15                     password: password,
16                     csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(),
17                     geetest_challenge: validate.geetest_challenge,
18                     geetest_validate: validate.geetest_validate,
19                     geetest_seccode: validate.geetest_seccode
20                 },
21                 success: function (data) {
22                     console.log(data);
23                     if (data.status){
24                         //有错误,status值为1
25                         $('.login-error').text(data.msg);
26                     }
27                     else {
28                         //登陆成功 status=0 msg='/login/'
29                         location.href=data.msg;
30                     }
31                 }
32             });
33         });
34         //绑定点击事件 出现滑动验证
35         $("#login_to").click(function () {
36             captchaObj.show();
37         });
38         // 将验证码加到id为captcha的元素里
39         captchaObj.appendTo("#virycode");
40         // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
41     };
42       // 当input框获取焦点时将之前的错误清空
43     $("#username,#password").focus(function () {
44         // 将之前的错误清空
45         $(".login-error").text("");
46     });
47 
48     // 验证开始需要向网站主后台获取id,challenge,success(是否启用failback)
49     $.ajax({
50         url: "/pc-geetest/register?t=" + (new Date()).getTime(), // 加随机数防止缓存
51         type: "get",
52         dataType: "json",
53         success: function (data) {
54             // 使用initGeetest接口
55             // 参数1:配置参数
56             // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
57             initGeetest({
58                 gt: data.gt,
59                 challenge: data.challenge,
60                 product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
61                 offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注
62                 // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config
63             }, handlerPopup);
64         }
65     });
66 </script>
请求的链接 /pc-geetest/register 是用来处理极验的验证码的
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
在urls对应关系:
1 url(r'^login',views.login),
2 url(r'^index',views.index),
3 url(r'^pc-geetest/register',views.get_geetest),

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

视图函数的具体实现:

1 from django.shortcuts import render,redirect,HttpResponse
 2 from django.http import JsonResponse
 3 from django.contrib import auth
 4 # Create your views here.
 5 from geetest import GeetestLib
 6 
 7 from apprun import models
16 
17 from django.contrib import auth
18 def login(request):
19    if request.method=='POST':
20       #初始化一个给ajax返回的数据
21       ret={"status":0,"msg":""}
22       user=request.POST.get('username')    #获取输入的用户名  数据来自ajax的data大字典
23       psd=request.POST.get('password')      #获取输入的密码
24       # 获取极验 滑动验证码相关的参数
25       gt = GeetestLib(pc_geetest_id, pc_geetest_key)
26       challenge = request.POST.get(gt.FN_CHALLENGE, '')
27       validate = request.POST.get(gt.FN_VALIDATE, '')
28       seccode = request.POST.get(gt.FN_SECCODE, '')
29       status = request.session[gt.GT_STATUS_SESSION_KEY]
30       user_id = request.session["user_id"]
31       if status:
32          result = gt.success_validate(challenge, validate, seccode, user_id)
33       else:
34          result = gt.failback_validate(challenge, validate, seccode)
35 
36       if result:
37          # 验证码正确 验证码通过
38          # 利用auth模块做用户名和密码的校验
39          user_obj = auth.authenticate(username=user, password=psd)
40          if user_obj:   #如果用户名和密码正确给用户做登陆
41              auth.login(request,user_obj) #把用户对象信息封装进request
42              ret["msg"] = "/index/"
43 
44          else:
45              ret["status"]=1
46              ret["msg"]="用户名或密码错误!"
47 
48       else:
49          ret["status"]=1
50          ret["msg"] = "验证码错误"
51       return JsonResponse(ret)
52 
53    return render(request,'login.html')
54 
55 def index(request):
56    return render(request,'index.html')
57 
58 # 请在官网申请ID使用,示例ID不可使用
59 pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"
60 pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4"
61 
62 #处理极验获取验证码
63 def get_geetest(request):
64    user_id = 'test'
65    gt = GeetestLib(pc_geetest_id, pc_geetest_key)
66    status = gt.pre_process(user_id)
67    request.session[gt.GT_STATUS_SESSION_KEY] = status
68    request.session["user_id"] = user_id
69    response_str = gt.get_response_str()
70    return HttpResponse(response_str)