Django之验证码

Posted yinwenjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django之验证码相关的知识,希望对你有一定的参考价值。

一、自己生成验证码

 

二、极验科技互动验证码

使用前步骤:下载官网文件——pip install geetest——引入其封装的js模块

代码分为三段:生成验证码——显示验证码——验证验证码、

 1 from django.shortcuts import render,HttpResponse
 2 from django.http import JsonResponse
 3 from django.contrib import auth
 4 from geetest import GeetestLib
 5 
 6 # Create your views here.
 7 
 8 #使用极验滑动验证码的登陆
 9 def login(request):
10     if request.method == "POST":
11         print("1")
12         #初始化一个返回给ajax的字典
13         ret = {"status":0,"msg":""}
14         #从提交的数据中获取用户名和密码
15         username = request.POST.get("username")
16         password = request.POST.get("password")
17         #获取验证码相关数据
18         gt = GeetestLib(pc_geetest_id, pc_geetest_key)
19         challenge = request.POST.get(gt.FN_CHALLENGE, ‘‘)
20         validate = request.POST.get(gt.FN_VALIDATE, ‘‘)
21         seccode = request.POST.get(gt.FN_SECCODE, ‘‘)
22         status = request.session[gt.GT_STATUS_SESSION_KEY]
23         user_id = request.session["user_id"]
24 
25         if status:
26             result = gt.success_validate(challenge, validate, seccode, user_id)
27         else:
28             result = gt.failback_validate(challenge, validate, seccode)
29 
30         #如果result有值,则验证成功,利用auth做验证
31         if result:
32             user = auth.authenticate(username=username,password=password)
33             if user:
34                 #如果用户名密码正确
35                 auth.login(request,user)
36                 ret["msg"] = "/index/"
37             else:
38                 ret["status"] = 1
39                 ret["msg"] = "用户名密码错误"
40         else:
41             #如果验证吗错误
42             ret["status"] = 1
43             ret["msg"] = "验证码错误"
44         return JsonResponse(ret)
45     return render(request,"login.html",locals())
46 
47 
48 #请在官网申请ID使用,示例ID不可使用
49 pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"
50 pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4"
51 #获取滑动验证码
52 def get_geetest(request):
53     user_id = test
54     gt = GeetestLib(pc_geetest_id, pc_geetest_key)
55     status = gt.pre_process(user_id)
56     request.session[gt.GT_STATUS_SESSION_KEY] = status
57     request.session["user_id"] = user_id
58     response_str = gt.get_response_str()
59     return HttpResponse(response_str)
60 
61 
62 def index(request):
63     return render(request,"index.html",locals())
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Title</title>
  6     <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
  7     <link rel="stylesheet" href="/static/css/mystyle.css">
  8 </head>
  9 <body>
 10 
 11 <div class="container">
 12     <div class="row">
 13         <form class="form-horizontal col-md-6 col-md-offset-3 login-form">
 14             {% csrf_token %}
 15             <div class="form-group">
 16                 <label for="username" class="col-sm-2 control-label">用户名</label>
 17                 <div class="col-sm-10">
 18                     <input type="text" class="form-control" id="username" name="username" placeholder="用户名">
 19                 </div>
 20             </div>
 21             <div class="form-group">
 22                 <label for="password" class="col-sm-2 control-label">密码</label>
 23                 <div class="col-sm-10">
 24                     <input type="password" class="form-control" id="password" name="password" placeholder="密码">
 25                 </div>
 26             </div>
 27             <div class="form-group">
 28                 <div id="popup-captcha"></div>
 29             </div>
 30             <div class="form-group">
 31                 <div class="col-sm-offset-2 col-sm-10">
 32                     <button type="button" class="btn btn-default" id="login-button">登录</button>
 33                     <span class="login-error"></span>
 34                 </div>
 35             </div>
 36         </form>
 37     </div>
 38 </div>
 39 
 40 
 41 <script src="/static/jquery.js"></script>
 42 <script src="/static/bootstrap/js/bootstrap.min.js"></script>
 43 <!-- 引入封装了failback的接口--initGeetest -->
 44 <script src="http://static.geetest.com/static/tools/gt.js"></script>
 45 <script>
 46     //发送数据
 47     var handlerPopup = function (captchaObj) {
 48     // 成功的回调
 49     captchaObj.onSuccess(function () {
 50         var validate = captchaObj.getValidate();
 51         var username = $("#username").val();
 52         var password = $("#password").val();
 53         $.ajax({
 54             url: "/login/", // 进行二次验证
 55             type: "post",
 56             dataType: "json",
 57             data: {
 58                 username: username,
 59                 password: password,
 60                 csrfmiddlewaretoken: $("[name=‘csrfmiddlewaretoken‘]").val(),
 61                 geetest_challenge: validate.geetest_challenge,
 62                 geetest_validate: validate.geetest_validate,
 63                 geetest_seccode: validate.geetest_seccode
 64             },
 65             success: function (data) {
 66                 if(data.status){
 67                     $(".login-error").text(data.msg);
 68                 }else{
 69                     location.href = data.msg;
 70                 }
 71             }
 72         });
 73     });
 74 
 75     //绑定事件显示滑动验证码
 76     $("#login-button").click(function () {
 77         captchaObj.show();
 78     });
 79     // 将验证码加到id为captcha的元素里
 80     captchaObj.appendTo("#popup-captcha");
 81     // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
 82 };
 83     // 验证开始需要向网站主后台获取id,challenge,success(是否启用failback)
 84     $.ajax({
 85         url: "/pc-geetest/register?t=" + (new Date()).getTime(), // 加随机数防止缓存
 86         type: "get",
 87         dataType: "json",
 88         success: function (data) {
 89             // 使用initGeetest接口
 90             // 参数1:配置参数
 91             // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
 92             initGeetest({
 93                 gt: data.gt,
 94                 challenge: data.challenge,
 95                 product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
 96                 offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注
 97                 // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config
 98             }, handlerPopup);
 99         }
100     });
101 
102 
103 </script>
104 </body>
105 </html>

 

以上是关于Django之验证码的主要内容,如果未能解决你的问题,请参考以下文章

django之图形验证码生成

django基础知识之验证码:

Django框架之验证码生成示例

Django自定制插件之随机验证码

Django学习系列之captcha 验证码插件

Django 之验证码实现