用Python写一个滑动验证码

系统 1826 0

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张图片

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论