首先安装一个需要用到的模块

pip install social-auth-app-django

安装完后在终端输入pip list会看到

social-auth-app-django 3.1.0

social-auth-core 3.0.0

然后可以来我的github,下载关于滑动验证码的这个demo:https://github.com/Edward66/slide_auth_code

下载完后启动项目

python manage.py runserver

启动这个项目后,在主页就能看到示例

前端部分

随便选择一个(最下面的是移动端,不做移动端不要选)把html和js代码复制过来,我选择的是弹出式的。这里面要注意他的ajax请求发送的网址,你可以把这个网址改成自己视图函数对应的网址,自己写里面的逻辑,比如我是为了做用户登陆验证,所以我是写的逻辑是拿用户输入的账号、密码和数据库里的做匹配。

login.html

登陆页面

登陆页面


slide_auth_code.css

#embed-captcha {

width: 300px;

margin: 0 auto;

}

.show {

display: block;

}

.hide {

display: none;

}

#notice {

color: red;

}

/* 以下遮罩层为demo.用户可自行设计实现 */

#mask {

display: none;

position: fixed;

text-align: center;

left: 0;

top: 0;

width: 100%;

height: 100%;

background-color: rgba(0, 0, 0, 0.5);

overflow: auto;

}

/* 可自行设计实现captcha的位置大小 */

.popup-mobile {

position: relative;

}

#popup-captcha-mobile {

position: fixed;

display: none;

left: 50%;

top: 50%;

transform: translate(-50%, -50%);

-webkit-transform: translate(-50%, -50%);

z-index: 9999;

}

slide_auth_code.js

let handlerPopup = function (captchaObj) {

// 成功的回调

captchaObj.onSuccess(function () {

let validate = captchaObj.getValidate();

$.ajax({

url: "", // 进行二次验证

type: "post",

dataType: "json",

data: {

user: $('#user').val(),

pwd: $('#pwd').val(),

},

success: function (data) {

if (data.user) {

location.href = '/index/'

} else {

$('#error-info').text(data.msg).css({'color': 'red', 'margin-left': '10px'});

setTimeout(function () {

$('#error-info').text('');

}, 3000)

}

}

});

});

$("#popup-submit").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);

}

});

注意:我是把ajax请求的url改成了当前页面的视图函数。另外原生代码是全部写在html里的,我把它做了解耦。还有原生代码用的是jquery-1.12.3,我改成了jquery-3.3.1,也可以正常使用。强烈建议先看看原生代码。

后端部分

urls.py

由于后端的逻辑是自己写的,这里只需要用到pcgetcaptcha这部分代码,来处理验证部分。

首先在urls.py里加入路径

from django.urls import path, re_path

from blog.views import slide_code_auth

# 滑动验证码

path('login/', views.login),

re_path(r'^pc-geetest/register', slide_code_auth, name='pcgetcaptcha'),

# slide_auth_code是我自己写的名字,原名是pcgetcaptcha

我把pcgetcaptcha的逻辑部分放到了utils/slide_auth_code.py里面,当做工具使用

utils/slide_auth_code.py

from blog.geetest import GeetestLib

pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"

pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4"

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 response_str

# pc_geetest_id和pc_geetest_key不可省略,如果做移动端要加上mobile_geetest_id和mobile_geetest_key

views.py

from django.contrib import auth

from django.shortcuts import render, HttpResponse

from django.http import JsonResponse

from blog.utils.slide_auth_code import pcgetcaptcha

def login(request):

if request.method == "POST":

response = {'user': None, 'msg': None}

user = request.POST.get('user')

pwd = request.POST.get('pwd')

user = auth.authenticate(username=user, password=pwd)

if user:

auth.login(request, user)

response['user'] = user.username

else:

response['msg'] = '用户名或密码错误'

return JsonResponse(response)

return render(request, 'login.html')

# 滑动验证码

def slide_code_auth(request):

response_str = pcgetcaptcha(request)

return HttpResponse(response_str)

def index(request):

return render(request, 'index.html')

注意:不一定非要按照我这样,根据自己的需求选择相应的功能并做出相应的修改

标签:code,python,request,验证码,geetest,slide,auth,滑动,user

来源: https://www.cnblogs.com/lshedward/p/10381146.html

python实现滑动验证码_使用python实现滑动验证码相关推荐

  1. python 训练识别验证码_用Python机器学习搞定验证码

    原标题:用Python机器学习搞定验证码 写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字.字母的组合,国内也 ...

  2. python手工打码_使用Python + Selenium破解滑块验证码

    在前面一篇博客,介绍了 Selenium 的基本用法和爬虫开发过程中经常使用的一些小技巧,利用这些写出一个浏览器爬虫已经完全没有问题了.看了前一篇博客,可能有人会有疑惑,浏览器爬虫的优势感觉并不比传统 ...

  3. python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础

    本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...

  4. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  5. python画交互式地图_使用Python构建交互式地图-入门指南

    python画交互式地图 Welcome to The Beginner's Guide to Building Interactive Maps in Python 欢迎使用Python构建交互式地 ...

  6. python信息管理系统实战_最新python入门+进阶+实战课堂教学管理系统开发全套完整版...

    Python+pillow图像编程1:pillow扩展库安装与基础用法.avi Python+pillow图像编程2:Image子模块用法1.avi Python+pillow图像编程3:Image子 ...

  7. python出现的意义_[转]Python中下划线以及命名空间的意义

    Python 用下划线作为变量前缀和后缀指定特殊变量/方法. 主要存在四种情形 1. 1. object # public 2. __object__ # special, python system ...

  8. python剪辑视频 裁剪_用python进行视频剪辑

    一.目标 python,利用moviepy和pydub将一段视频进行区间切割 二.源码 import os from moviepy.video.io.VideoFileClip import Vid ...

  9. python大数据免费_用python做大数据

    不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...

  10. python字符串去掉空行_从python中的字符串中删除空格

    python字符串去掉空行 如何在python中删除字符串中的空格 (How to remove whitespaces in a string in python) str.lstrip()str. ...

最新文章

  1. 程序员离职带走源码竟获利800万,网友:我一般都是删库跑路
  2. 判断事件源的另一方法
  3. 数据库表DML不了 可能是被锁了
  4. python编程注释_自学python编程笔记之:python的注释
  5. graphpad图片怎么导出矢量图_为何我的文章图片总是不满足杂志社要求?
  6. PTA—念数字(C语言)两种方法
  7. HDU 4272 LianLianKan(状压DP)题解
  8. 干货丨7款易上手C语言编程软件推荐
  9. 【等保小知识】等保二级是否需要做密评?什么是密评?
  10. 装系统时出现获取硬盘分区失败 可能缺少硬盘驱动怎么办
  11. 服务器端查询客户端cookie时的拙计
  12. 【校招 --阶段一 操作系统基础】进程地址空间
  13. 登录 不输入账号密码 不能到下一个页面 没办法通过网址直接进去
  14. apollo决策规划学习--施工绕行
  15. Max OS 打开 JD-GUI 报错
  16. 信息安全知识竞赛试题
  17. Matplotlib画折线图
  18. 开启xmp1还是2_家用门窗常见开启方式及优势
  19. 泛读论文:Person-reID 行人重识别合集
  20. ben we_老WE成立手游战队!2020LOL冬季转会汇总:截止11月17日(每日更新)

热门文章

  1. 代购如何精准引流?做代购怎么找客源?代购引流技巧
  2. 一次性弄懂debounce
  3. 为什么每次升职加薪都没你的份?
  4. system.out.println 函数使用
  5. 【数据压缩作业】MEPG音频编码
  6. python爬取率_利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息
  7. 查看Linux端口占用,并kill掉相关进程
  8. 解决关于swift的Array repeating 初始化多个对象问题
  9. [转帖]Photoshop照片合成:水晶球里的性感美女
  10. python 使用公司邮箱发邮件_python 通过邮件发送附件之企业QQ邮箱