Python を使用して Web ユーザーのログインおよび登録機能を実装する
この記事では、主に Python を使用して Web ユーザーのログインと登録機能を実装するチュートリアルを紹介します。必要な友人はそれを参照してください。
ユーザー管理は、ほとんどの Web ウェブサイトが解決する必要がある問題です。ユーザー管理には、ユーザーの登録とログインが含まれます。
ユーザー登録は比較的簡単です。まず、API を通じてユーザー登録関数を実装します。
_RE_MD5 = re.compile(r'^[0-9a-f]{32}$') @api @post('/api/users') def register_user(): i = ctx.request.input(name='', email='', password='') name = i.name.strip() email = i.email.strip().lower() password = i.password if not name: raise APIValueError('name') if not email or not _RE_EMAIL.match(email): raise APIValueError('email') if not password or not _RE_MD5.match(password): raise APIValueError('password') user = User.find_first('where email=?', email) if user: raise APIError('register:failed', 'email', 'Email is already in use.') user = User(name=name, email=email, password=password, image='http://www.gravatar.com/avatar/%s?d=mm&s=120' % hashlib.md5(email).hexdigest()) user.insert() return user
ユーザーのパスワードは、MD5 計算後にクライアントによって渡される 32 ビットのハッシュ文字列であることに注意してください。ではありません ユーザーの元のパスワードが不明です。
次に、登録ページを作成し、ユーザーに登録フォームに入力させ、登録済みユーザーの API にデータを送信できます:
{% extends '__base__.html' %} {% block title %}注册{% endblock %} {% block beforehead %} <script> function check_form() { $('#password').val(CryptoJS.MD5($('#password1').val()).toString()); return true; } </script> {% endblock %} {% block content %} <p class="uk-width-2-3"> <h1>欢迎注册!</h1> <form id="form-register" class="uk-form uk-form-stacked" onsubmit="return check_form()"> <p class="uk-alert uk-alert-danger uk-hidden"></p> <p class="uk-form-row"> <label class="uk-form-label">名字:</label> <p class="uk-form-controls"> <input name="name" type="text" class="uk-width-1-1"> </p> </p> <p class="uk-form-row"> <label class="uk-form-label">电子邮件:</label> <p class="uk-form-controls"> <input name="email" type="text" class="uk-width-1-1"> </p> </p> <p class="uk-form-row"> <label class="uk-form-label">输入口令:</label> <p class="uk-form-controls"> <input id="password1" type="password" class="uk-width-1-1"> <input id="password" name="password" type="hidden"> </p> </p> <p class="uk-form-row"> <label class="uk-form-label">重复口令:</label> <p class="uk-form-controls"> <input name="password2" type="password" maxlength="50" placeholder="重复口令" class="uk-width-1-1"> </p> </p> <p class="uk-form-row"> <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-user"></i> 注册</button> </p> </form> </p> {% endblock %} Try
このようにして、ユーザー登録機能が完了しました:
ユーザーログインはユーザー登録よりも複雑です。 HTTP プロトコルはステートレス プロトコルであり、サーバーはユーザーのステータスを追跡する必要があるため、これは Cookie を通じてのみ実現できます。ほとんどの Web フレームワークは、ユーザーの状態を保存する Cookie をカプセル化するセッション機能を提供します。
Session の利点は、シンプルで使いやすく、ユーザーのログイン情報を Session から直接取得できることです。
Session の欠点は、サーバーが 3 つ以上のサーバーがある場合、ユーザーのログイン情報を保存するためにメモリ内にマッピング テーブルを維持する必要があるため、Session を使用した Web アプリを拡張するのが難しいことです。
ユーザーのログインを確認するために Cookie を直接読み取る方法を使用します。この方法の利点は、サーバーがあらゆる URL をステートレスな方法で処理し、確認できることです。複数のサーバーに拡張されました。
サーバーはログイン成功後に Cookie を生成してブラウザに送信するため、この Cookie がクライアントによって偽造されないことを確認する必要があります。
偽造防止 Cookie を実現する鍵は、一方向アルゴリズム (MD5 など) を使用することです。例:
ユーザーが正しいパスワードを入力してログインに成功すると、サーバーはデータベースからユーザーの ID を取得できます。次のように計算します:
"ユーザー ID" + "有効期限" + MD5("ユーザー ID" + "ユーザー パスワード" + "有効期限" + "シークレットキー")
ブラウザが Cookie を送信するときサーバーが取得できる情報には以下が含まれます:
ユーザー ID
有効期限
MD5 値
有効期限に達していない場合、サーバーはユーザーのパスワードを検索しますユーザー ID に基づいて、
MD5 ("ユーザー ID" + "ユーザー パスワード" + "有効期限" + "シークレットキー")
を計算し、ブラウザー Cookie の MD5 と比較します。それらが等しい場合、それは意味します。それ以外の場合、Cookie は偽造されます。
このアルゴリズムの重要な点は、MD5 が一方向アルゴリズムであるということです。つまり、MD5 は元の文字列から計算できますが、元の文字列を MD5 から推定することはできません。
したがって、ログイン API は次のように実装できます:
@api @post('/api/authenticate') def authenticate(): i = ctx.request.input() email = i.email.strip().lower() password = i.password user = User.find_first('where email=?', email) if user is None: raise APIError('auth:failed', 'email', 'Invalid email.') elif user.password != password: raise APIError('auth:failed', 'password', 'Invalid password.') max_age = 604800 cookie = make_signed_cookie(user.id, user.password, max_age) ctx.response.set_cookie(_COOKIE_NAME, cookie, max_age=max_age) user.password = '******' return user # 计算加密cookie: def make_signed_cookie(id, password, max_age): expires = str(int(time.time() + max_age)) L = [id, expires, hashlib.md5('%s-%s-%s-%s' % (id, password, expires, _COOKIE_KEY)).hexdigest()] return '-'.join(L) 对于每个URL处理函数,如果我们都去写解析cookie的代码,那会导致代码重复很多次。 利用拦截器在处理URL之前,把cookie解析出来,并将登录用户绑定到ctx.request对象上,这样,后续的URL处理函数就可以直接拿到登录用户: @interceptor('/') def user_interceptor(next): user = None cookie = ctx.request.cookies.get(_COOKIE_NAME) if cookie: user = parse_signed_cookie(cookie) ctx.request.user = user return next() # 解密cookie: def parse_signed_cookie(cookie_str): try: L = cookie_str.split('-') if len(L) != 3: return None id, expires, md5 = L if int(expires) < time.time(): return None user = User.get(id) if user is None: return None if md5 != hashlib.md5('%s-%s-%s-%s' % (id, user.password, expires, _COOKIE_KEY)).hexdigest(): return None return user except: return None Try
このようにして、ユーザー登録とログイン機能が完了しました。
関連する推奨事項:
以上がPython を使用して Web ユーザーのログインおよび登録機能を実装するの詳細内容です。詳細については、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)

ホットトピック











PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。
