用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(登录界面)


"en">

    "UTF-8">
    欢迎登录
    "stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    "stylesheet" href="/static/mystyle.css">


class="container">
class="row">
class="form-horizontal col-md-6 col-md-offset-3 login-form"> {% csrf_token %}
class="form-group">
class="col-sm-10"> "text" class="form-control" id="username" name="username" placeholder="用户名">
class="form-group">
class="col-sm-10"> "password" class="form-control" id="password" name="password" placeholder="密码">
class="form-group"> {# 放置极验的滑动验证码#}
"popup-captcha">
class="form-group">
class="col-sm-offset-2 col-sm-10"> class="login-error">
View Code

2.2.index.py(跳转界面)


"en">

    "UTF-8">
    index


这是index界面

View Code

2.3.urls.py(部署路径)

"""BBS URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from blog import views

urlpatterns = [
    path('login/', views.login),
    path('index/', views.index),
    # 极验滑动验证码,获取验证码的url
    path('pc-geetest/register/', views.get_geetest),
]
View Code

2.4.views.py

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

# Create your views here.
# 使用极验滑动验证码的登录功能
def login(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"]

        if status:
            result = gt.success_validate(challenge, validate, seccode, user_id)
        else:
            result = gt.failback_validate(challenge, validate, seccode)
        if result:
            # 验证码正确
            # 利用auth模块做用户名和密码的校验
            user = auth.authenticate(username=username, password=pwd)
            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")

def index(request):
    return render(request,'index.html')

# 处理极验验证码的试视图
#请在官网申请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)
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。

import pymysql
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.效果图

用Python写一个滑动验证码_第1张图片

5.项目目录结构图

用Python写一个滑动验证码_第2张图片

 

你可能感兴趣的:(用Python写一个滑动验证码)