Django は Pillow を使用して検証コード機能を簡単に設定します (Python)

Django は Pillow を使用して検証コード機能を簡単に設定します (Python)

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に直接貼り付ける

<img src="/verify_code/" alt="驗證碼">

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 ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • PythonはPillow(PIL)ライブラリを使用して検証コード画像の全プロセスを実装します
  • Python3 ピローモジュールはシンプルな検証コードを実装します
  • Python3はpillowライブラリを使用してランダム検証コードを生成します
  • Python3 Pillowは簡単な検証コード画像例を生成します
  • Pillow を介して動的検証コードを識別するための Python サンプルコード

<<:  Reactフックの仕組み

>>:  MacBook 向け Python 3.7 インストール チュートリアル

推薦する

Docker ベースの Jenkins のデプロイに関する詳細なチュートリアル

このドキュメントを作成した当時は2019年12月頃で、er2.200が最新バージョンでした。 1.画...

JavaScript でオブザーバー パターンを実装する方法

目次概要オブザーバーパターンの応用シナリオオブザーバーパターンの実装要約する概要オブザーバー パター...

MySQL グラフィカル管理ツール Navicat のインストール手順

目次序文1. 全員にインストールパッケージを用意する2. Navicatをインストールし、Navic...

CSSはグラデーションを巧みに利用して高度な背景光アニメーションを実現します

成し遂げるこの効果は CSS を使用して完全に再現することは困難です。 CSS でシミュレートされた...

MySQLの保存場所を新しいディスクに移行する方法

1. 新しいディスクを準備し、現在のルートパーティションと同じファイルシステムでフォーマットし、ディ...

Linuxターミナルでの一般的なMySQL操作コマンドの詳細な説明

仕える: # chkconfig --list すべてのシステム サービスを一覧表示します # ch...

MySQLの3つの用途と違いは同等ではない

MySQLでは判定記号がよく使われますが、等しくない記号はもっと一般的に使われます。次の3つの等しく...

javascript:void(0) の意味と使用例

voidキーワードの紹介まず、void キーワードは JavaScript で非常に重要なキーワード...

純粋なCSSを使用してスクロールシャドウ効果を実現します

端的に言うと、スクロール可能な要素には非常によくある状況があります。通常、スクロールすると、要素が現...

MySQL シーケンス AUTO_INCREMENT の詳細な説明とサンプルコード

MySQL シーケンス AUTO_INCREMENT の詳細な説明とサンプルコードMySQL シーケ...

LinuxでのMySQLのインストール手順

1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...

マウスがカード上に移動したときにフローティング効果を実現する CSS の使用例

原理ホバーしたときに要素に影を設定します: box-shadow で、通常とは異なるスタイルにします...

MySQL 5.7.27 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.27 winx64のインストールと設定方法を参考までに紹介します。...

Mysql 中国語ソートルールの説明

MySQL を使用する際、フィールドをソートしたりクエリしたりすることがよくあります。通常は、中国語...

Vue3 でモバイル ログインおよび登録モジュールをエレガントに実装する方法

目次序文入力ボックスコンポーネントレイアウトvモデルデータ検証ルール設計形状サブコンポーネントは検証...