下载极验科技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: ,
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)