検索

検証コードをjsで実装する方法

Oct 12, 2017 am 10:09 AM
javascript方法確認する

検証コードのライフサイクル

Web アプリケーションでは、ログインと登録に検証コードがよく使用されます。確認コードは基本的に画像です。
検証コードのライフサイクルを見てみましょう:

  1. クライアントは検証コードをリクエストします

  2. サーバーは検証コードをレンダリングします:

  • ランダムな文字列を含む画像をレンダリングします

  • random文字列はセッションに書き込まれます

  • 画像を読み取り、応答を返します

  1. clientの送信:ユーザー入力文字列

    ユーザー入力を送信
  • サーバー側検証:

  • セッションに保存されたランダムな文字列を取り出し、ユーザーによって送信された文字列と比較します
  1. 文字列情報が一致しているので次のステップに進む

    文字列情報が一致していないためエラーメッセージが返される
  • 上記の処理を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.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/imghwm/default1.png" data-src="/valid_code/" class="lazy" alt="検証コードをjsで実装する方法" > タグの属性: list-paddingleft-2"><li> <code><a href="#%20" 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/imghwm/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(&#39;refresh&#39;)[0];
        var validPic = document.getElementsByTagName(&#39;img&#39;)[0];
        refresh.onclick = function () {
            validPic.src += "?"; //利用img标签的特性,刷新验证码
        }
    </script>


def valid_code(request):    
with open(&#39;bilibili.jpg&#39;, &#39;rb&#39;)as f:
        res = f.read()

    valid_code = &#39;bilibili&#39;
    request.session["valid_code"] = valid_code    
    return HttpResponse(res)

说明:

  1. test.html中<img src="/static/imghwm/default1.png" data-src="/valid_code/" class="lazy" alt="検証コードをjsで実装する方法" >标签的属性:,表示向http://127.0.0.1:8000/valid_code/发起get 请求,以获取图片

  2. 点击<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=&#39;RGB&#39;, size=(120, 30),
                    color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))    # 创建图像对象(模式,大小,颜色)

    draw = ImageDraw.Draw(img, mode=&#39;RGB&#39;)  # 创建画笔(图像对象,模式)
    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 = &#39;&#39;.join(code_list)  
    request.session["valid_code"] = valid_code  # 验证码写入session
    
    return HttpResponse(f.getvalue())  # `getvalue()`方法拿到内存文件句柄的内容

说明:验证码本质就是一张图片,这里就先返回一张图片吧。。。

  • 浏览器访问http://127.0.0.1:8000/test/

検証コードをjsで実装する方法

说明:显示以上页面其实有两次get请求:

  1. /test/发起get请求,服务端返回test.html页面;

  2. test.html页面中<img src="/static/imghwm/default1.png" data-src="/valid_code/" class="lazy" alt="検証コードをjsで実装する方法" >标签的属性:,对/valid_code/发起get请求,服务端返回一张图片

  3. 提交验证码:输入'bilibili',显示‘OK',否则重定向到当前页面,略。

生成随机验证码

这样似乎就成了,不过实际应用中的验证码都是随机生成的。而上面的验证码不论怎么刷新,也不会变,服务端始终返回一张静态图片。那么有没有办法呢?有,用pillow画图模块,每次请求过来,服务端实时渲染一张包含随机字符串的图片。下面我们改写valid_code函数:


rrreee

说明:

  1. 使用前需要先安装pillow模块:pip install pillow

  2. 绘制的图像可以保存的磁盘上,但是速度慢,这里使用内存管理from io import BytesIO,优化速度

  3. f = BytesIO() 拿到一个内存文件句柄

  4. f.getvalue()拿到内存文件句柄的内容

  5. 注意,Django的session信息默认存在数据库,使用session前应先执行数据库迁移,以生成django_session表

  • 现在重新访问http://127.0.0.1:8000/test/

valid_code ビュー関数を定義し、検証コードをセッションに書き込み、検証コードを返します: 検証コードをjsで実装する方法

🎜🎜rrreee🎜 説明: 検証コードは本質的に画像なので、最初に画像を返しましょう。 。 。 🎜🎜🎜🎜ブラウザアクセス http://127.0.0.1:8000/test/: 🎜🎜🎜🎜検証コードをjsで実装する方法🎜🎜注: 上記のページには実際には 2 つの取得リクエストがあります: 🎜🎜🎜🎜 to /test/Initiate get リクエストの場合、サーバーは test.html ページ 🎜🎜🎜🎜test.html ページのタグの <img src="/static/imghwm/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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版

SublimeText3 Mac版

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

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター