一、自己生成验证码

二、极验科技互动验证码

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

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

 from django.shortcuts import render,HttpResponse
 from django.http import JsonResponse
 from django.contrib import auth
 from geetest import GeetestLib

 # Create your views here.

 #使用极验滑动验证码的登陆
 def login(request):
     if request.method == "POST":
         ")
         #初始化一个返回给ajax的字典
         ret = {"status":0,"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)

         #如果result有值,则验证成功,利用auth做验证
         if result:
             user = auth.authenticate(username=username,password=password)
             if user:
                 #如果用户名密码正确
                 auth.login(request,user)
                 ret["msg"] = "/index/"
             else:
                 ret["status"] = 1
                 ret["msg"] = "用户名密码错误"
         else:
             #如果验证吗错误
             ret["status"] = 1
             ret["msg"] = "验证码错误"
         return JsonResponse(ret)
     return render(request,"login.html",locals())

 #请在官网申请ID使用,示例ID不可使用
 pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"
 pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4"
 #获取滑动验证码
 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)

 def index(request):
     return render(request,"index.html",locals())
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/static/css/mystyle.css">
 </head>
 <body>

 <div class="container">
     <div class="row">
         <form class="form-horizontal col-md-6 col-md-offset-3 login-form">
             {% csrf_token %}
             <div class="form-group">
                 <label for="username" class="col-sm-2 control-label">用户名</label>
                 <div class="col-sm-10">
                     <input type="text" class="form-control" id="username" name="username" placeholder="用户名">
                 </div>
             </div>
             <div class="form-group">
                 <label for="password" class="col-sm-2 control-label">密码</label>
                 <div class="col-sm-10">
                     <input type="password" class="form-control" id="password" name="password" placeholder="密码">
                 </div>
             </div>
             <div class="form-group">
                 <div id="popup-captcha"></div>
             </div>
             <div class="form-group">
                 <div class="col-sm-offset-2 col-sm-10">
                     <button type="button" class="btn btn-default" id="login-button">登录</button>
                     <span class="login-error"></span>
                 </div>
             </div>
         </form>
     </div>
 </div>

 <script src="/static/jquery.js"></script>
 <script src="/static/bootstrap/js/bootstrap.min.js"></script>
 <!-- 引入封装了failback的接口--initGeetest -->
 <script src="http://static.geetest.com/static/tools/gt.js"></script>
 <script>
     //发送数据
     var handlerPopup = function (captchaObj) {
     // 成功的回调
     captchaObj.onSuccess(function () {
         var validate = captchaObj.getValidate();
         var username = $("#username").val();
         var password = $("#password").val();
         $.ajax({
             url: "/login/", // 进行二次验证
             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){
                     $(".login-error").text(data.msg);
                 }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: "/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>

Django之验证码的更多相关文章

  1. django生成验证码

    django生成验证码 # 制作验证码 def verify_code(): # 1,定义变量,用于画面的背景色.宽.高 # random.randrange(20, 100)意思是在20到100之间 ...

  2. Django之验证码 + session 认证

    验证码 + session认证 目录结构 . └── project ├── app01 │   ├── admin.py │   ├── apps.py │   ├── __init__.py │  ...

  3. python django 实现验证码的功能

    我也是刚学Python  Django不久很多都不懂,所以我现在想一边学习一边记录下来然后大家一起讨论! 验证码功能一开始我在网上找了很多的demo但是我在模仿他们写的时候,发现在我的版本上根本就不能 ...

  4. Django 生成验证码或二维码 pillow模块

    一.安装PIL PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,API也非常简单易用.   PIL模块只支持到Python 2 ...

  5. django(一)验证码

    这里讲讲在django中使用第三方插件验证码的流程. 一. 先安装pillow, 通过 python -m pip install pillow 二.安装完后,在官方网站上看操作过程.地址:pillo ...

  6. Django Redis验证码 密码 session 实例

    1.settings CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCach ...

  7. django的验证码

    pip install Pillow==3.4.1在views.py中创建一个视图函数 from PIL import Image, ImageDraw, ImageFont from django. ...

  8. Django 之验证码实现

    1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install P ...

  9. Django中验证码的登录

    需求概述 一般登录页面或者其他页面都需要验证码的功能,那在Django中如何实现呢? 这基本就需要用到第三方模块了:pillow 还需要两个文件,一个是字体文件:Monaco.ttf,另一个是一个模块 ...

随机推荐

  1. Openwrt自定义CGI实现

    此文已由作者吴志勐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 安装uhttpd. 在编译openwrt前,输入make memuconfig,查找Network -> ...

  2. SQL Server中存储过程的创建命令

    Create Proc 存储过程名称 ( @参数1 参数类型, @参数2 参数类型, ... ... --最后一行参数,别加逗号了,加逗号的意思是表示后面还有参数 ) AS 需要执行的SQL命令 GO ...

  3. Office开发必备知识----为什么要释放非托管Com资源

    https://www.cnblogs.com/Charltsing/p/RealeaseComObject.html QQ:564955427 目前,国内Office插件开发的风头正盛,很多VBAe ...

  4. 搭建Android手机服务器(一)

    自从上学期的软件工程课之后,我们团队设计的抢答器一直想把服务端移到移动端.所以,我一直在考虑如何把手机作为一台服务器.今天我主要讲解一下,对于没有android真机只有模拟器的,如何设置模拟器,使得在 ...

  5. NOIP2001提高组复赛B 数的划分

    题目链接:https://ac.nowcoder.com/acm/contest/249/B 题目大意: 略 分析1(记忆化搜索): 方法为减而治之,把n划分成k份的答案就相当于每次把n分成a,b两个 ...

  6. JAVA多线程-初体验

    一.线程和进程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 二.为什么使用多线程,哪些场景下使用 多线程的好处是提高程序 ...

  7. luogu P1744 采购特价商品

    实话说我本来想找SPFA的题,结果我硬生生的把这道题做成了Floyd 先来看题,我们会发现如果把他所给的变量都输入,那么会发现用Floyd的解法,输入占了main函数的一半长度... 题目分为两步走: ...

  8. 【LOJ6060】【2017 山东一轮集训 Day1 / SDWC2018 Day1】Set 线性基

    题目大意 给出 \(n\) 个非负整数,将数划分成两个集合,记为一号集合和二号集合.\(x_1\) 为一号集合中所有数的异或和,\(x_2\) 为二号集合中所有数的异或和.在最大化 \(x_1 + x ...

  9. 测试常用Linux命令

    大家应该经常在网络上看到下图吧,虽然我们不会去执行下面图片中的命令,但是linux常用的命令对于测试人员来说,还是必须掌握的,不管是做功能测试还是性能测试,最常用的就是看日志了. sudo是linux ...

  10. P1020 导弹拦截 (贪心+最长不降子序列)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...