日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

用Python寫一個(gè)滑動(dòng)驗(yàn)證碼

系統(tǒng) 2065 0

1.準(zhǔn)備階段

  滑動(dòng)驗(yàn)證碼我們可以直接用GEETEST的滑動(dòng)驗(yàn)證碼。

  打開網(wǎng)址:https://www.geetest.com/?,找到技術(shù)文檔中的行為驗(yàn)證,打開部署文檔,點(diǎn)擊Python,下載ZIP包。

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

  解壓,找到django_demo,為了方便復(fù)制粘貼代碼,可以用編輯器打開項(xiàng)目。

2.實(shí)施

  自己先寫一個(gè)簡單的登錄,然后將django_demo中的關(guān)鍵代碼復(fù)制到我們自己的項(xiàng)目中。過程省去,我直接貼代碼。

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 " > { # 放置極驗(yàn)的滑動(dòng)驗(yàn)證碼#}
" popup-captcha " >
class = " form-group " >
class = " col-sm-offset-2 col-sm-10 " > class = " login-error " >
View Code

2.2.index.py(跳轉(zhuǎn)界面)

              
"
              
                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),
    
              
              
                #
              
              
                 極驗(yàn)滑動(dòng)驗(yàn)證碼,獲取驗(yàn)證碼的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.
              
              
                
#
              
              
                 使用極驗(yàn)滑動(dòng)驗(yàn)證碼的登錄功能
              
              
                def
              
              
                 login(request):
    
              
              
                #
              
              
                 if request.is_ajax():  # 如果是AJAX請(qǐng)求
              
              
                if
              
               request.method == 
              
                "
              
              
                POST
              
              
                "
              
              
                :
        
              
              
                #
              
              
                 初始化一個(gè)給AJAX返回的數(shù)據(jù)
              
              
        ret = {
              
                "
              
              
                status
              
              
                "
              
              : 0, 
              
                "
              
              
                msg
              
              
                "
              
              : 
              
                ""
              
              
                }
        
              
              
                #
              
              
                 從提交過來的數(shù)據(jù)中 取到用戶名和密碼
              
              
        username = request.POST.get(
              
                "
              
              
                username
              
              
                "
              
              
                )
        pwd 
              
              = request.POST.get(
              
                "
              
              
                password
              
              
                "
              
              
                )
        
              
              
                #
              
              
                 獲取極驗(yàn) 滑動(dòng)驗(yàn)證碼相關(guān)的參數(shù)
              
              
        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:
            
              
              
                #
              
              
                 驗(yàn)證碼正確
              
              
                #
              
              
                 利用auth模塊做用戶名和密碼的校驗(yàn)
              
              
            user = auth.authenticate(username=username, password=
              
                pwd)
            
              
              
                if
              
              
                 user:
                
              
              
                #
              
              
                 用戶名密碼正確
              
              
                #
              
              
                 給用戶做登錄
              
              
                                auth.login(request, user)
                ret[
              
              
                "
              
              
                msg
              
              
                "
              
              ] = 
              
                "
              
              
                /index/
              
              
                "
              
              
                else
              
              
                :
                
              
              
                #
              
              
                 用戶名密碼錯(cuò)誤
              
              
                ret[
              
                "
              
              
                status
              
              
                "
              
              ] = 1
              
                
                ret[
              
              
                "
              
              
                msg
              
              
                "
              
              ] = 
              
                "
              
              
                用戶名或密碼錯(cuò)誤!
              
              
                "
              
              
                else
              
              
                :
            ret[
              
              
                "
              
              
                status
              
              
                "
              
              ] = 1
              
                
            ret[
              
              
                "
              
              
                msg
              
              
                "
              
              ] = 
              
                "
              
              
                驗(yàn)證碼錯(cuò)誤
              
              
                "
              
              
                return
              
              
                 JsonResponse(ret)
    
              
              
                return
              
               render(request, 
              
                "
              
              
                login.html
              
              
                "
              
              
                )


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


              
              
                #
              
              
                 處理極驗(yàn)驗(yàn)證碼的試視圖
              
              
                
#
              
              
                請(qǐng)?jiān)诠倬W(wǎng)申請(qǐng)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需要加一些東西。首先創(chuàng)建一個(gè)數(shù)據(jù)庫,用于存儲(chǔ)各類表。創(chuàng)建好之后,需要連接pycharm。

              DATABASES =
              
                 {
    
              
              
                '
              
              
                default
              
              
                '
              
              
                : {
        
              
              
                '
              
              
                ENGINE
              
              
                '
              
              : 
              
                '
              
              
                django.db.backends.mysql
              
              
                '
              
              
                ,
        
              
              
                '
              
              
                NAME
              
              
                '
              
              : 
              
                '
              
              
                bbs
              
              
                '
              
              
                ,
        
              
              
                '
              
              
                HOST
              
              
                '
              
              : 
              
                '
              
              
                127.0.0.1
              
              
                '
              
              
                ,
        
              
              
                '
              
              
                PORT
              
              
                '
              
              : 
              
                '
              
              
                3306
              
              
                '
              
              
                ,
        
              
              
                '
              
              
                USER
              
              
                '
              
              : 
              
                '
              
              
                root
              
              
                '
              
              
                ,
        
              
              
                '
              
              
                PASSWORD
              
              
                '
              
              : 
              
                '
              
              
                000000
              
              
                '
              
              
                ,
    }
}
              
            
修改setting.py中的這一部分

  同時(shí)在項(xiàng)目下的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.生成用戶

  終端執(zhí)行兩行代碼:

            
              python manage.py makemigrations
python manage.py migrate
            
          

  在auth_user表中添加一個(gè)用戶,超級(jí)用戶和普通用戶都可以。

            python manage.py createsuperuser
          

3.靜態(tài)文件

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

4.效果圖

用Python寫一個(gè)滑動(dòng)驗(yàn)證碼_第1張圖片

5.項(xiàng)目目錄結(jié)構(gòu)圖

用Python寫一個(gè)滑動(dòng)驗(yàn)證碼_第2張圖片

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 静海县| 内丘县| 新建县| 宁晋县| 台东县| 沂水县| 西畴县| 吴忠市| 奎屯市| 裕民县| 通许县| 东乡| 永嘉县| 昌乐县| 淮南市| 平遥县| 神木县| 齐河县| 湄潭县| 明水县| 琼中| 建瓯市| 离岛区| 修武县| 印江| 铁岭县| 孟津县| 夏邑县| 仁怀市| 克什克腾旗| 沁阳市| 壤塘县| 桑日县| 松桃| 海南省| 达日县| 平塘县| 鄄城县| 岳阳市| 德安县| 常宁市|