検証コードをjsで実装する方法
検証コードのライフサイクル
Web アプリケーションでは、ログインと登録に検証コードがよく使用されます。確認コードは基本的に画像です。
検証コードのライフサイクルを見てみましょう:
クライアントは検証コードをリクエストします
サーバーは検証コードをレンダリングします:
ランダムな文字列を含む画像をレンダリングします
random文字列はセッションに書き込まれます
画像を読み取り、応答を返します
clientの送信:ユーザー入力文字列
- ユーザー入力を送信
サーバー側検証:
- セッションに保存されたランダムな文字列を取り出し、ユーザーによって送信された文字列と比較します
-
文字列情報が一致しているので次のステップに進む
- 文字列情報が一致していないためエラーメッセージが返される
- 上記の処理をDjangoで練習してみましょう。
検証コードの練習
ValidCode という名前の新しい Django プロジェクトを作成し、アプリケーション app01 を作成します。次のようにルーティングを構成します。 http://127.0.0.1:8000/test/、クライアントがデータを送信したら test.html ページに戻り、セッションに保存されている検証コードを取り出して、クライアントによって送信された文字列と比較します。ユーザー:
from django.conf.urls import urlfrom app01 import views
urlpatterns = [
url(r'^test/$', views.test),
url(r'^valid_code/$', views.valid_code),
]
ログイン後にコピー
from django.conf.urls import urlfrom app01 import views urlpatterns = [ url(r'^test/$', views.test), url(r'^valid_code/$', views.valid_code), ]
from django.shortcuts import render, HttpResponse, redirectdef test(request): if request.method == 'GET': return render(request, 'test.html') code1 = request.session['valid_code'] code2 = request.POST.get('valid_code') if code1 == code2: return HttpResponse('OK') else: return redirect('/test/')
ログイン後にコピー手順:
test.html の <img src="/static/imghw/default1.png" data-src="/valid_code/" class="lazy" alt="検証コードをjsで実装する方法" >
タグの属性: list-paddingleft-2"><li> <code><a href="# " class="refresh"> </a>
タグを更新し、validPic.src += "?"
を実行して画像を再取得します (検証コードを更新します)
http://127.0.0.1:8000/test/
时,返回test.html页面;当客户端提交提交数据时,取出session中保存的验证码与用户提交的字符串进行对比:
<form action="" method="post"> {% csrf_token %} <p> <label for="valid_code">验证码:</label> </p> <p> <input type="text" id="valid_code" name="valid_code"> <img src="/static/imghw/default1.png" data-src="/valid_code/" class="lazy" alt="validPic" style="max-width:90%" style="max-width:90%"><a href="#" class="refresh">刷新</a> </p> <p> <button type="submit">验证</button> </p> </form> <script> var refresh = document.getElementsByClassName('refresh')[0]; var validPic = document.getElementsByTagName('img')[0]; refresh.onclick = function () { validPic.src += "?"; //利用img标签的特性,刷新验证码 } </script>
def valid_code(request): with open('bilibili.jpg', 'rb')as f: res = f.read() valid_code = 'bilibili' request.session["valid_code"] = valid_code return HttpResponse(res)
说明:
test.html中
<img src="/static/imghw/default1.png" data-src="/valid_code/" class="lazy" alt="検証コードをjsで実装する方法" >
标签的属性:,表示向
http://127.0.0.1:8000/valid_code/
发起get 请求,以获取图片点击
<a href="#" class="refresh">刷新</a>
标签,执行validPic.src += "?"
,以重新获取图片(刷新验证码)
定义valid_code视图函数,将验证码写入session中,并返回验证码:
def valid_code(request): from PIL import Image, ImageDraw, ImageFont from io import BytesIO # 内存管理,优化速度 import random img = Image.new(mode='RGB', size=(120, 30), color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) # 创建图像对象(模式,大小,颜色) draw = ImageDraw.Draw(img, mode='RGB') # 创建画笔(图像对象,模式) font = ImageFont.truetype("app01/static/fonts/kumo.ttf", 28) # 读取字体(字体路径,字体大小) code_list = [] for i in range(5): char = random.choice([chr(random.randint(65, 90)), str(random.randint(1, 9))]) code_list.append(char) draw.text([i * 24, 0], char, (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), font=font) # 通过画笔的text方法,为图像绘制字符串(位置,文本,颜色,字体) # [i * 24, 0] 字体坐标,i*24设置水平偏移,让每个字符分开显示 f = BytesIO() # 拿到一个内存文件句柄f img.save(f, "png") # 保存图像对象到f valid_code = ''.join(code_list) request.session["valid_code"] = valid_code # 验证码写入session return HttpResponse(f.getvalue()) # `getvalue()`方法拿到内存文件句柄的内容
说明:验证码本质就是一张图片,这里就先返回一张图片吧。。。
浏览器访问
http://127.0.0.1:8000/test/
:
说明:显示以上页面其实有两次get请求:
对
/test/
发起get请求,服务端返回test.html页面;test.html页面中
<img src="/static/imghw/default1.png" data-src="/valid_code/" class="lazy" alt="検証コードをjsで実装する方法" >
标签的属性:,对
/valid_code/
发起get请求,服务端返回一张图片提交验证码:输入'bilibili',显示‘OK',否则重定向到当前页面,略。
生成随机验证码
这样似乎就成了,不过实际应用中的验证码都是随机生成的。而上面的验证码不论怎么刷新,也不会变,服务端始终返回一张静态图片。那么有没有办法呢?有,用pillow画图模块,每次请求过来,服务端实时渲染一张包含随机字符串的图片。下面我们改写valid_code函数:
说明:
使用前需要先安装pillow模块:pip install pillow
绘制的图像可以保存的磁盘上,但是速度慢,这里使用内存管理
from io import BytesIO
,优化速度f = BytesIO()
拿到一个内存文件句柄f.getvalue()
拿到内存文件句柄的内容注意,Django的session信息默认存在数据库,使用session前应先执行数据库迁移,以生成django_session表
现在重新访问
http://127.0.0.1:8000/test/
valid_code ビュー関数を定義し、検証コードをセッションに書き込み、検証コードを返します:
http://127.0.0.1:8000/test/
: 🎜🎜🎜🎜
/test/
Initiate get リクエストの場合、サーバーは test.html ページ 🎜🎜🎜🎜test.html ページのタグの <img src="/static/imghw/default1.png" data-src="/valid_code/" class="lazy" alt="検証コードをjsで実装する方法" >
属性を返します: code >、<code>/valid_code/
への get リクエストを開始すると、サーバーは画像を返します 🎜🎜🎜🎜 確認コードを送信します: 「bilibili」と入力すると、「OK」と表示されます。それ以外の場合はリダイレクトされます現在のページへ、省略。 🎜🎜🎜🎜ランダムな検証コードを生成する🎜🎜これは機能するように見えますが、実際のアプリケーションの検証コードはすべてランダムに生成されます。上記の検証コードをどのように更新しても、サーバーは常に静的な画像を返します。それで、何か方法はありますか?はい、枕描画モジュールを使用すると、リクエストが行われるたびに、サーバーはランダムな文字列を含む画像をリアルタイムでレンダリングします。次に valid_code 関数を書き換えます: 🎜🎜🎜🎜rrreee🎜 説明: 🎜🎜🎜🎜 使用する前に枕モジュールをインストールする必要があります: pip installpillow🎜🎜🎜🎜 描画したイメージはディスクに保存できますが、速度はここではメモリ管理が使用されています。from io import BytesIO
、速度を最適化します🎜🎜🎜🎜f = BytesIO()
メモリ ファイル ハンドルを取得します🎜🎜🎜🎜 f.getvalue()
code>メモリ ファイル ハンドルの内容を取得します🎜🎜🎜🎜Django のセッション情報はデフォルトでデータベースに保存されることに注意してください。セッションを使用する前に、データベース移行を実行して django_session を生成する必要があります。 table🎜🎜🎜🎜🎜🎜 ここで http://127.0.0.1:8000/test/
にアクセスしてください: 🎜🎜🎜🎜🎜🎜🎜 検証コードはリアルタイムで生成されており、 「更新」をクリックすると、新しい画像が表示されます。 🎜以上が検証コードをjsで実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











残念ながら、WeChat は広く使用されているソーシャル ソフトウェアであり、何らかの理由で特定の連絡先を誤って削除してしまうことがよくあります。ユーザーがこの問題を解決できるように、この記事では、削除された連絡先を簡単な方法で取得する方法を紹介します。 1. WeChat の連絡先削除メカニズムを理解します。これにより、削除された連絡先を取得できるようになります。WeChat の連絡先削除メカニズムでは、連絡先がアドレス帳から削除されますが、完全には削除されません。 2. WeChat の組み込みの「連絡先帳復元」機能を使用します。WeChat には、この機能を通じて以前に削除した連絡先をすばやく復元できる「連絡先帳復元」機能が用意されています。 3. WeChat 設定ページに入り、右下隅をクリックし、WeChat アプリケーション「Me」を開き、右上隅にある設定アイコンをクリックして設定ページに入ります。

Colorful マザーボードは中国国内市場で高い人気と市場シェアを誇っていますが、Colorful マザーボードのユーザーの中には、設定のために BIOS を入力する方法がまだ分からない人もいます。この状況に対応して、編集者はカラフルなマザーボード BIOS に入る 2 つの方法を特別に提供しました。ぜひ試してみてください。方法 1: U ディスク起動ショートカット キーを使用して、U ディスク インストール システムに直接入ります。ワンクリックで U ディスクを起動する Colorful マザーボードのショートカット キーは ESC または F11 です。まず、Black Shark インストール マスターを使用して、Black Shark インストール マスターを作成します。 Shark U ディスク起動ディスクを選択し、コンピュータの電源を入れます。起動画面が表示されたら、キーボードの ESC キーまたは F11 キーを押し続けて、起動項目を順次選択するウィンドウに入ります。「USB」の場所にカーソルを移動します。 」と表示され、その後

トマト ノベルは非常に人気のある小説閲覧ソフトウェアです。トマト ノベルでは、新しい小説や漫画を読むことができます。どの小説も漫画もとても面白いです。小説を書きたい友達もたくさんいます。お小遣いを稼いで、小説の内容を編集することもできます。 「テキストに文章を書きたいです。それで、小説はどうやって書くのですか?友達は知らないので、一緒にこのサイトに行きましょう。小説の書き方の入門を少し見てみましょう。」 Tomato Novels を使用して小説を書く方法に関するチュートリアルを共有します。 1. まず、携帯電話で Tomato Free Novels アプリを開き、パーソナル センター - ライター センターをクリックします。 2. Tomato Writer Assistant ページに移動し、次の場所で [新しい本の作成] をクリックします。小説の終わり

テクノロジーの発展に伴い、モバイルゲームは人々の生活に欠かせないものになりました。かわいいドラゴンエッグの画像と面白い孵化過程で多くのプレイヤーの注目を集めており、その中でも注目を集めているゲームの一つがモバイル版ドラゴンエッグです。プレイヤーがゲーム内で自分のドラゴンをより適切に育成し成長させることができるように、この記事ではモバイル版でドラゴンの卵を孵化させる方法を紹介します。 1. 適切な種類のドラゴン エッグを選択する プレイヤーは、ゲーム内で提供されるさまざまな種類のドラゴン エッグの属性と能力に基づいて、自分に適したドラゴン エッグの種類を慎重に選択する必要があります。 2. 孵化機のレベルをアップグレードします。プレイヤーはタスクを完了し、小道具を収集することで孵化機のレベルを向上させる必要があります。孵化機のレベルは孵化速度と孵化成功率を決定します。 3. プレイヤーはゲームに参加する必要がある孵化に必要なリソースを収集します。

1. WeChatを開いた後、検索アイコンをクリックし、WeChatチームと入力し、下のサービスをクリックして入力します。 2. 入力後、左下隅にあるセルフサービス ツール オプションをクリックします。 3. をクリックした後、上のオプションで、補助検証のブロック解除/再審査請求のオプションをクリックします。

Win11 管理者権限の取得方法のまとめ. Windows 11 オペレーティング システムでは、管理者権限は、ユーザーがシステム上でさまざまな操作を実行できるようにする非常に重要な権限の 1 つです。ソフトウェアのインストールやシステム設定の変更など、一部の操作を完了するために管理者権限の取得が必要になる場合があります。以下にWin11の管理者権限を取得する方法をまとめましたので、お役に立てれば幸いです。 1. ショートカット キーを使用する Windows 11 システムでは、ショートカット キーを使用してコマンド プロンプトをすばやく開くことができます。

Oracleバージョンのクエリ方法を詳しく解説 Oracleは、世界で最も人気のあるリレーショナルデータベース管理システムの1つで、豊富な機能と強力なパフォーマンスを提供し、企業で広く使用されています。データベースの管理と開発のプロセスでは、Oracle データベースのバージョンを理解することが非常に重要です。この記事では、Oracle データベースのバージョン情報をクエリする方法と具体的なコード例を詳しく紹介します。単純な SQL ステートメントを実行して、Oracle データベース内の SQL ステートメントのデータベース バージョンをクエリします。

携帯電話が人々の日常生活において重要なツールになるにつれて、フォント サイズの設定は重要なパーソナライゼーション要件になりました。さまざまなユーザーのニーズを満たすために、この記事では、簡単な操作で携帯電話の使用体験を向上させ、携帯電話のフォントサイズを調整する方法を紹介します。携帯電話のフォント サイズを調整する必要があるのはなぜですか - フォント サイズを調整すると、テキストがより鮮明で読みやすくなります - さまざまな年齢のユーザーの読書ニーズに適しています - フォント サイズを使用すると、視力の悪いユーザーにとって便利です携帯電話システムの設定機能 - システム設定インターフェイスに入る方法 - 設定インターフェイスで「表示」オプションを見つけて入力します。 - 「フォント サイズ」オプションを見つけて、サードパーティでフォント サイズを調整します。アプリケーション - フォント サイズの調整をサポートするアプリケーションをダウンロードしてインストールします - アプリケーションを開いて、関連する設定インターフェイスに入ります - 個人に応じて
