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

推薦する

Linux deb パッケージの解凍、変更、その他の操作方法のコード例

さまざまな理由により、debパッケージ内のさまざまなファイルの内容を直接変更する必要がある場合があり...

Vueのシンプルストアの詳しい説明

Vue におけるストアの最も単純な応用はグローバル ストレージです。ここでは、相互にジャンプするため...

ページ内の検索エンジンの呼び出しはBaiduを例に挙げています

今日、突然、自分のウェブページで Google や Baidu のような強力な検索エンジンを呼び出す...

HTML の 5 種類のスペースの意味

HTML には、幅の異なる 5 つのスペース エンティティが用意されています。非改行スペース ( )...

MySQL の時間タイプの選択

目次日時タイムスタンプ選び方ミリ秒の時間を保存する方法結論MySQL は、日付と時刻を処理するために...

CSSでフレックス配置を表示する(レイアウトツール)

display: flex レイアウトに関しては、深く理解している人もいますし、私も他の人の作業か...

MySql のスロークエリ分析とスロークエリログの開き方の詳細説明

最近はMySQLのパフォーマンス最適化についても研究しているので、今日の投稿は勉強ノートとしても使え...

Vue.js フロントエンドプロジェクト向け多言語ソリューションのアイデアと実践

目次1. 通常どのようなコンテンツを処理する必要があるか2. 基本的な考え方3. 具体的な実践の詳細...

vue の v-bind を理解する

目次1. v-bindの主要ソースコードの分析1. v-bind属性はどこに均一に保存されるか: a...

ローカルの Windows リモート デスクトップから Alibaba Cloud Ubuntu 16.04 サーバーに接続する方法

ローカル Windows リモート デスクトップが Alibaba Cloud Ubuntu 16....

MySQL 内部結合の使用例 (必読)

文法規則 列名を選択 テーブル名1から INNER JOIN テーブル名2 ON テーブル名1.列名...

HTML+CSS3+JSで実装されたドロップダウンメニュー

成果を達成する html <div class="コンテナ"> &l...

MySQL 数十億のデータのインポート、エクスポート、移行に関するメモ

最近はMySQLのメモをたくさん取っていますが、それは主に会社のOracleが比較的安定していてメン...

Zookeeper 不正アクセス テストの問題

目次序文Zookeeper サービスのオープンを検出情報を入手する接続テスト接続先修理計画参照する序...

Linux でも利用できる人気の Windows アプリ 10 選

データ分析会社Net Market Shareによると、Linuxデスクトップオペレーティングシステ...