用Python写一个滑动验证码
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写一个滑动验证码相关推荐
- 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
- python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
- 200行代码实现一个滑动验证码
作者 | 崔庆才 转载自进击的Coder(ID: FightingCoder) 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还 ...
- 用Python爬虫破解滑动验证码
我们可以借用opencv来解决这个问题,主要步骤: opencv 是什么? OpenCV(Open Source Computer Vision Library)是开放源代码计算机视觉库,主要算法涉及 ...
- 前端 验证码隐藏怎么实现_Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
- float js 正则 验证_爬虫篇 | 200 行代码实现一个滑动验证码
最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍. 爬虫篇 | Python使用正则来爬取豆瓣图书数据 爬虫篇 | ...
- python爬虫抢火车票_如何用python写一个简单的12306抢票软件|python 爬火车票 教程...
python 如果抓取验证码图片 类似12306的登录验证码图片 这个以前做次.最大的麻烦是码的识别算法的识别率太低.12306那种网站登陆错3次就限制你20分钟.所以除非你有33%以上的识别率否则不 ...
- 教你用Python写一个京东自动下单抢购脚本(Python实现京东自动抢购)
很多朋友都有网购抢购限量商品的经历,有时候蹲点抢怎么也抢不到,今天小编带你们学习怎么用Python写一个京东自动下单抢购脚本,以后再也不用拼手速拼网速啦,快来一起看看吧 1 问题背景 经过无数次抢购失 ...
- python写一个通讯录step by step V3.0
python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...
最新文章
- C语言易错图形题--打印n行n列的空心正方形图案
- 荒唐!985高校规定研究生上课迟到两次就扣 500 元国家助学金!
- android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递
- 首个卡车全栈自动驾驶系统发布:嬴彻轩辕!年内量产上路
- Hibernate学习第一天
- SMTP身份验证(LOGIN、PLAIN、CRAM-MD5)
- AndroidStudio通过JDBC连接MySQL数据库六大巨坑
- web.config mysql_web.config配置mysql数据库连接
- 易语言 设置屏幕刷新率 源码_一块好的手机屏幕应具备什么条件?现在了解还不晚...
- Visual Studio 快捷键汇总
- PHP漏洞全解(二)-命令注入攻击
- python请简述构造函数和析构函数的作用_python – 构造函数和析构函数如何工作?...
- 猎豹浏览器缓存文件在哪 猎豹浏览器缓存文件位置说明
- java怎么获取中文首字母_Java如何获取中文拼音首字母的方法介绍
- 疑似一加7渲染图曝光:弹出式自拍镜头+高颜值渐变配色
- CNN反向传播算法过程
- Xml的编码和Bom
- Qt - QVariant
- JS在当前页面中调用iframe中的方法
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.3 验证XML文档
热门文章
- python 错误类型及解释
- 深信服防火墙console波特率_乾颐盾之深信服防火墙------初始化教程
- 计算机改网络id,Windows 8普通版移除“网络ID”修改功能
- strrstr php,php之字符串
- mysql的列生成下拉_ComboBox读取数据库生成下拉列表的算法简化
- TransUNet:Transformers医学图像分割强编码器
- php在图片左上角加入水印,如何在PHP中将图像添加到图像上,如水印
- python办公室应用_Python干货:玩转办公室软件(一)PP还能这样玩!
- 从零开始刷Leetcode——数组(746.747)
- php warning: directive,安装Composer PHP Warning: copy(): SSL operation failed with code