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 インストール チュートリアル
さまざまな理由により、debパッケージ内のさまざまなファイルの内容を直接変更する必要がある場合があり...
Vue におけるストアの最も単純な応用はグローバル ストレージです。ここでは、相互にジャンプするため...
今日、突然、自分のウェブページで Google や Baidu のような強力な検索エンジンを呼び出す...
HTML には、幅の異なる 5 つのスペース エンティティが用意されています。非改行スペース ( )...
目次日時タイムスタンプ選び方ミリ秒の時間を保存する方法結論MySQL は、日付と時刻を処理するために...
display: flex レイアウトに関しては、深く理解している人もいますし、私も他の人の作業か...
最近はMySQLのパフォーマンス最適化についても研究しているので、今日の投稿は勉強ノートとしても使え...
目次1. 通常どのようなコンテンツを処理する必要があるか2. 基本的な考え方3. 具体的な実践の詳細...
目次1. v-bindの主要ソースコードの分析1. v-bind属性はどこに均一に保存されるか: a...
ローカル Windows リモート デスクトップが Alibaba Cloud Ubuntu 16....
文法規則 列名を選択 テーブル名1から INNER JOIN テーブル名2 ON テーブル名1.列名...
成果を達成する html <div class="コンテナ"> &l...
最近はMySQLのメモをたくさん取っていますが、それは主に会社のOracleが比較的安定していてメン...
目次序文Zookeeper サービスのオープンを検出情報を入手する接続テスト接続先修理計画参照する序...
データ分析会社Net Market Shareによると、Linuxデスクトップオペレーティングシステ...