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 インストール チュートリアル

推薦する

10 種類のモダンなレイアウトを実現するための CSS コード

序文日曜日に自宅で web.dev の 2020 3 日間ライブを視聴したところ、興味深い点がたくさ...

JavaScript の instanceof メソッドの手動実装

1. instanceofの使用法instanceof演算子は、コンストラクター関数のprototy...

HTMLとXHTML、HTML4とHTML5のタグの違いについて簡単に紹介します。

HTML と XHTML の違い1. XHTML要素は正しくネストされている必要がある2. XHT...

開発者とオペレーターが注目すべき Linux デバッグ ツール [推奨]

システム パフォーマンスの専門家である Brendan D. Gregg 氏は、LinuxCon N...

PostgreSQL マテリアライズドビュープロセス分析

この記事は主にPostgreSQLマテリアライズドビューのプロセス分析について紹介します。サンプルコ...

8桁の割引コードをランダムに生成し、MySQLデータベースに保存します。

現在、多くの企業が割引コードを通じてプロモーションを行っています。今では、8桁の割引コードを実装して...

HTML4とHTML5の違い: 入力にフォーカス実装コードを追加する方法

html4:コードをコピーコードは次のとおりです。 <フォーム> <p>&l...

ドラッグフォトウォールを実現するネイティブJS

この記事では、ネイティブ JS で実装されたドラッグ可能な写真ウォールを紹介します。効果は次のとおり...

Windows Server2014 にセキュリティを適用して MySQL をインストールする際のエラーに対する完璧な解決策

理由はインストール後にきちんとアンインストールされなかったためです。この問題を解決するには、次の点に...

CSS 属性値正規マッチングセレクターの使い方 (ヒント)

属性値の正規一致セレクターには 3 つの種類があります。 [属性^="値"] [...

Linux で ARM 開発ボード用のファイルシステムを作成する

1. Busyboxのソースコードをオンラインでダウンロードしてください。コンパイル方法については、...

MySQLとRedisでセカンダリキャッシュを実装する方法の詳細な説明

Redis の紹介Redis は完全にオープンソースで無料であり、BSD プロトコルに準拠しており、...

Linux システムでの vim プラグインのインストールの概要

目次vimプラグインマネージャーをインストールするプラグインデモを追加プラグインを削除するには: v...

Docker での Redis 接続の急増をトラブルシューティングした実践的な記録

土曜日、本番サーバー上の Redis サーバーが利用できなくなり、エラー メッセージは次のようになり...

Linux で Sudo を使用して権限を委譲する

sudo 権限委譲の概要su スイッチ ID: su –l ユーザー名 –c 'コマンド&#...