1. モジュールをインポートし、検証状態を定義する PIL から Image、ImageDraw、ImageFont をインポートします django.utils.six から BytesIO をインポートします def verify_code(リクエスト): #ランダム関数モジュールの導入 import random #画面の背景色、幅、高さの変数を定義します bgcolor = (random.randrange(20, 100), random.randrange( 20、100)、255) 幅 = 100 高さ = 25 # スクリーンオブジェクトを作成する im = Image.new('RGB', (width, height), bgcolor) #ブラシオブジェクトを作成する draw = ImageDraw.Draw(im) #ブラシの point() 関数を呼び出して、i の範囲 (0, 100) にノイズを描画します。 xy = (random.randrange(0, 幅), random.randrange(0, 高さ)) 塗りつぶし = (random.randrange(0, 255), 255, random.randrange(0, 255)) 描画ポイント(xy, 塗りつぶし=塗りつぶし) #検証コードの代替値を定義します str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0' #検証コードとして4つの値をランダムに選択 rand_str = '' iが範囲(0, 4)内にある場合: rand_str += str1[random.randrange(0, len(str1))] #フォント オブジェクトを構築します。Ubuntu のフォント パスは "/usr/share/fonts/truetype/freefont" です。 フォント = ImageFont.truetype('FreeMono.ttf', 23) #フォントカラーの構築 fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255)) #4つの単語を描画する draw.text((5, 2), rand_str[0], font=font, fill=fontcolor) 描画テキスト((25, 2), rand_str[1], フォント=フォント, 塗りつぶし=フォントカラー) 描画テキスト((50, 2), rand_str[2], フォント=フォント, 塗りつぶし=フォントカラー) 描画テキスト((75, 2), rand_str[3], フォント=フォント, 塗りつぶし=フォントカラー) #ブラシを離して描画 # さらなる検証のためにセッションに保存 request.session['verifycode'] = rand_str #メモリファイル操作 buf = BytesIO() #画像をメモリに保存します。ファイル形式はpngです im.save(buf, 'png') #メモリ内の画像データをクライアントに返します。MIMEタイプはimage pngです HttpResponse(buf.getvalue(), 'image/png') を返します。 3. ウェブページのimgに直接貼り付ける
4. ajaxを使用して認証パスワードとアカウントを取得する <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <title>ログイン</title> </head> <本文> <h1 class="表示"></h1> <input type="text" id = ユーザー名 value="{{username}}"> <br> <input type="text" id = パスワード> <br> <input type="text" id = yum> <a>認証コードを入力してください</a> <br> <img src="/verify_code/" alt="確認コード"> <input type="button" id="Ajax" value="ajax ログイン"> <br> <input type="checkbox" id = "ow" name="ow"> パスワードを記憶する<br> <a href="/get_cookies">クリックしてクッキーを取得</a> </本文> <script src="/static/index/js/jquery-3.3.1.min.js"></script> </html> <スクリプト> $(関数() { $('#Ajax').click(関数() { ユーザー名 = $('#username').val(); パスワード = $('#password').val(); ow = $("#ow").val(); yum は $('#yum').val() で始まります。 $.ajax({ 'url': '/loginajax', 'タイプ': '投稿', 'データ': {'ユーザー名': ユーザー名、'パスワード': パスワード、 "おいしい":おいしい,}, '成功':function(データ){ //ログインに成功すると1が返されます //ログインに失敗した場合は0を返す //検証に失敗しました。3 を返します (data.res == 1)の場合{ $('.show').show().html('ログイン成功') } そうでない場合 (data.res == 0) { $('.show').show().html('ログインに失敗しました') } そうでない場合 (data.res == 3){ $('.show').show().html('確認コードの入力に失敗しました') } } }); }); }); </スクリプト> 上記のajaxでは、アカウントのパスワードと確認コードがサーバーに送信されます。 検証機能では yzm = request.POST.get('yum') # 検証コードを取得します vaue = request.session['verifycode'] # 画像を生成するときに検証コードをセッションに保存します if yzm !=vaue: # 等しくない場合は 3 を返します HTML ajax は検証エラーを表示します return JsonResponse({'res':3}) 結果: 要約する 以上が私がご紹介した内容です。Django は Pillow を使って簡単に検証コード機能 (python) を設定します。お役に立てれば幸いです。ご質問があれば、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
>>: MacBook 向け Python 3.7 インストール チュートリアル
この記事では、JavaScriptで派手なカルーセル効果を実装する2つの方法を紹介します。具体的な内...
Rancher のデプロイメントには、次の 3 つのアーキテクチャがあります。高可用性 Kubern...
目次ストアドプロシージャの概要ストアド プロシージャを使用する理由は何ですか?ストアドプロシージャの...
Docker 公式ドキュメントからの翻訳、原文: https://docs.docker.com/n...
Web ページの読み込み速度は、Web サイトの品質を評価するための重要な指標です。その理由は、ほと...
MySQL ロックの概要他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純で...
目次ノードのバージョンが一致しない、ノードをアップグレードまたはダウングレードするnvm を使用して...
この記事では、ディープラーニングフレームワーク keras を使用して、SQL インジェクションの特...
# 以下の例は x64 ビット ランタイム v3.0.0 用です mkdir /runtimes ...
複数行のテキストがオーバーフローすると省略記号が表示されますこの記事では 2 つの方法を推奨します。...
Count(*) または Count(1) または Count([column]) は、おそらく S...
目次1.コンポーネントtimelineH.vueを実装する2. コンポーネントの呼び出しこの記事では...
序文403 クロスオリジン エラーが発生しNo 'Access-Control-Allow-...
1: アドレス書き換えとアドレス転送の意味を理解する。アドレス書き換えとアドレス転送は異なる...
1. VMwareでCentos7を接続し、固定IPを設定する1) まず、仮想イメージ名を右クリック...