1.准备阶段

  滑动验证码我们可以直接用GEETEST的滑动验证码。

  打开网址:https://www.geetest.com/ ,找到技术文档中的行为验证,打开部署文档,点击Python,下载ZIP包。

  ZIP包下载地址:https://github.com/GeeTeam/gt3-python-sdk/archive/master.zip

  解压,找到django_demo,为了方便复制粘贴代码,可以用编辑器打开项目。

2.实施

  自己先写一个简单的登录,然后将django_demo中的关键代码复制到我们自己的项目中。过程省去,我直接贴代码。

2.1.login.py(登录界面)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>欢迎登录</title><link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"><link rel="stylesheet" href="/static/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-3.3.1.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();// 取到用户填写的用户名和密码 ->取input框的值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) {console.log(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};//当input框获取焦点时将之前的错误清空$("#username,#password").focus(function () {//将之前的错误清空$(".login-error").text("");});//验证开始需要向网站主后台获取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>

View Code

2.2.index.py(跳转界面)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>index</title>
</head>
<body>
<h1>这是index界面</h1>
</body>
</html>

View Code

2.3.urls.py(部署路径)

"""BBS URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))"""
from django.contrib importadminfrom django.urls importpathfrom blog importviewsurlpatterns=[path('login/', views.login),path('index/', views.index),#极验滑动验证码,获取验证码的urlpath('pc-geetest/register/', views.get_geetest),
]

View Code

2.4.views.py

from django.shortcuts importrender,HttpResponsefrom geetest importGeetestLibfrom django.http importJsonResponsefrom django.contrib importauth#Create your views here.#使用极验滑动验证码的登录功能
deflogin(request):#if request.is_ajax():  # 如果是AJAX请求if request.method == "POST":#初始化一个给AJAX返回的数据ret = {"status": 0, "msg": ""}#从提交过来的数据中 取到用户名和密码username = request.POST.get("username")pwd= 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"]ifstatus:result=gt.success_validate(challenge, validate, seccode, user_id)else:result=gt.failback_validate(challenge, validate, seccode)ifresult:#验证码正确#利用auth模块做用户名和密码的校验user = auth.authenticate(username=username, password=pwd)ifuser:#用户名密码正确#给用户做登录
auth.login(request, user)ret["msg"] = "/index/"else:#用户名密码错误ret["status"] = 1ret["msg"] = "用户名或密码错误!"else:ret["status"] = 1ret["msg"] = "验证码错误"returnJsonResponse(ret)return render(request, "login.html")defindex(request):return render(request,'index.html')#处理极验验证码的试视图#请在官网申请ID使用,示例ID不可使用
pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"pc_geetest_key= "36fc3fe98530eea08dfc6ce76e3d24c4"
defget_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]=statusrequest.session["user_id"] =user_idresponse_str=gt.get_response_str()return HttpResponse(response_str)

View Code

2.5.settings.py

  settings.py需要加一些东西。首先创建一个数据库,用于存储各类表。创建好之后,需要连接pycharm。

DATABASES ={'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'bbs','HOST': '127.0.0.1','PORT': '3306','USER': 'root','PASSWORD': '000000',}
}

修改setting.py中的这一部分

  同时在项目下的app目录中的__init__.py中加上两行代码,告诉pychram我用了mysql。

importpymysql
pymysql.install_as_MySQLdb()

View Code

  在settings.py的最下方加上:

STATICFILES_DIRS =[os.path.join(BASE_DIR,"static")
]

2.6.生成用户

  终端执行两行代码:

python manage.py makemigrations
python manage.py migrate

  在auth_user表中添加一个用户,超级用户和普通用户都可以。

python manage.py createsuperuser

3.静态文件

https://files.cnblogs.com/files/missdx/static.rar

4.效果图

5.项目目录结构图

转载于:https://www.cnblogs.com/missdx/p/11384725.html

用Python写一个滑动验证码相关推荐

  1. 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  2. python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  3. 200行代码实现一个滑动验证码

    作者 | 崔庆才 转载自进击的Coder(ID: FightingCoder) 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还 ...

  4. 用Python爬虫破解滑动验证码

    我们可以借用opencv来解决这个问题,主要步骤: opencv 是什么? OpenCV(Open Source Computer Vision Library)是开放源代码计算机视觉库,主要算法涉及 ...

  5. 前端 验证码隐藏怎么实现_Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  6. float js 正则 验证_爬虫篇 | 200 行代码实现一个滑动验证码

    最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍. 爬虫篇 | Python使用正则来爬取豆瓣图书数据 爬虫篇 | ...

  7. python爬虫抢火车票_如何用python写一个简单的12306抢票软件|python 爬火车票 教程...

    python 如果抓取验证码图片 类似12306的登录验证码图片 这个以前做次.最大的麻烦是码的识别算法的识别率太低.12306那种网站登陆错3次就限制你20分钟.所以除非你有33%以上的识别率否则不 ...

  8. 教你用Python写一个京东自动下单抢购脚本(Python实现京东自动抢购)

    很多朋友都有网购抢购限量商品的经历,有时候蹲点抢怎么也抢不到,今天小编带你们学习怎么用Python写一个京东自动下单抢购脚本,以后再也不用拼手速拼网速啦,快来一起看看吧 1 问题背景 经过无数次抢购失 ...

  9. python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...

最新文章

  1. C语言易错图形题--打印n行n列的空心正方形图案
  2. 荒唐!985高校规定研究生上课迟到两次就扣 500 元国家助学金!
  3. android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递
  4. 首个卡车全栈自动驾驶系统发布:嬴彻轩辕!年内量产上路
  5. Hibernate学习第一天
  6. SMTP身份验证(LOGIN、PLAIN、CRAM-MD5)
  7. AndroidStudio通过JDBC连接MySQL数据库六大巨坑
  8. web.config mysql_web.config配置mysql数据库连接
  9. 易语言 设置屏幕刷新率 源码_一块好的手机屏幕应具备什么条件?现在了解还不晚...
  10. Visual Studio 快捷键汇总
  11. PHP漏洞全解(二)-命令注入攻击
  12. python请简述构造函数和析构函数的作用_python – 构造函数和析构函数如何工作?...
  13. 猎豹浏览器缓存文件在哪 猎豹浏览器缓存文件位置说明
  14. java怎么获取中文首字母_Java如何获取中文拼音首字母的方法介绍
  15. 疑似一加7渲染图曝光:弹出式自拍镜头+高颜值渐变配色
  16. CNN反向传播算法过程
  17. Xml的编码和Bom
  18. Qt - QVariant
  19. JS在当前页面中调用iframe中的方法
  20. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.3 验证XML文档

热门文章

  1. python 错误类型及解释
  2. 深信服防火墙console波特率_乾颐盾之深信服防火墙------初始化教程
  3. 计算机改网络id,Windows 8普通版移除“网络ID”修改功能
  4. strrstr php,php之字符串
  5. mysql的列生成下拉_ComboBox读取数据库生成下拉列表的算法简化
  6. TransUNet:Transformers医学图像分割强编码器
  7. php在图片左上角加入水印,如何在PHP中将图像添加到图像上,如水印
  8. python办公室应用_Python干货:玩转办公室软件(一)PP还能这样玩!
  9. 从零开始刷Leetcode——数组(746.747)
  10. php warning: directive,安装Composer PHP Warning: copy(): SSL operation failed with code