目次
1。HTMLフォームの構築
2。URLルーティング構成
3。ビュー関数の実装
メモとベストプラクティス
要約します
ホームページ ウェブフロントエンド htmlチュートリアル Djangoを使用してHTMLフォームデータとユーザー登録を処理するためのチュートリアル

Djangoを使用してHTMLフォームデータとユーザー登録を処理するためのチュートリアル

Sep 23, 2025 pm 09:03 PM

Djangoを使用してHTMLフォームデータとユーザー登録を処理するためのチュートリアル

この記事では、特にユーザー登録シナリオのために、DjangoプロジェクトでHTMLフォームの送信を処理し、ユーザー入力データを抽出し、データベースに安全に保存する方法について詳しく説明しています。コンテンツは、HTMLフォームの構成、Django URLルーティング、機能の実装を表示、およびユーザーの作成とパスワードのハッシュにDjangoの組み込みユーザーモデルの使用方法をカバーし、重要なセキュリティとベストプラクティスの提案を提供します。

Web開発では、ユーザーがHTMLフォームを介してアプリケーションと対話するための一般的な要件です。強力なPython Webフレームワークとして、Djangoはフォームデータを処理するための完全なメカニズムを提供します。このチュートリアルでは、ユーザー登録を例として、HTMLフォームからデータを抽出し、データベースに保存する方法を詳細に説明する例として説明します。

1。HTMLフォームの構築

まず、ユーザーデータを収集するには標準のHTMLフォームが必要です。 Django Projectsでは、セキュリティを確保するために、すべてのPOST要求フォームにはCSRF(クロスサイトリクエスト偽造)トークンが含まれている必要があります。

 
{%CSRF_TOKEN%} {#これはDjangoに固有のCSRFトークンです、非常に重要な#} 氏名 メールアドレス 電話番号 - オプション パスワード

キーポイント:

  • method = "post":フォームデータがpostメソッドで送信されることを指定します。
  • action = "{%url 'user-signup'%}":フォーム提出のターゲットURLを指定します。 {%url 'user-signup'%}は、urls.pyで定義された名前に基づいてURLを動的に生成するDjangoテンプレートタグです。
  • {%CSRF_TOKEN%}:これは、CSRF攻撃を防ぐためにDjangoが提供するセキュリティメカニズムです。このタグをすべての投稿フォームに必ず含めてください。
  • 名前属性:各入力フィールドには名前属性が必要です。 Djangoビューは、この名前属性を使用して、対応するフォームデータを取得します。

2。URLルーティング構成

次に、DjangoプロジェクトのURLs.pyファイルにURLパターンを定義し、対応するビュー関数に送信されたフォームのターゲットURLをマッピングする必要があります。

 #your_app_name/urls.py
django.urlsインポートパスから
から 。ビューをインポートします

urlpatterns = [
    path( "signup/"、views.signupview、name = "user-signup")、
]

キーポイント:

  • path( "signup/"、...):ユーザーが/signup/pathにアクセスすると、views.signupview関数によって処理されることを定義します。
  • name = "user-signup":このURLパターンの名前を指定します。この名前は、テンプレートで{%URL 'user-signup'%}を使用して参照できます。これは、URL管理と変更に便利です。

3。ビュー関数の実装

ビュー関数は、フォームの送信を処理するためのコアロジックです。フォームデータを受信し、処理し(データ検証、データベースへの保存など)、応答を返します。

 #your_app_name/views.py
django.shortcutsからインポートレンダリング、リダイレクト
django.contrib.auth.modelsからインポートユーザーから
django.contrib.authからインポートログインから
django.contribからインポートメッセージ#オプション:メッセージを表示するために使用されますsignupview(要求、 *args、** kwargs):
    request.method == "post"の場合:
        #1。post request username = request.post.get( "username")からデータを抽出します
        email_address = request.post.get( "emailadress")#htmlパスワードの名前属性と一致していることに注意してください。
        password_confirm = request.post.get( "passwordcon")
        Phone_number = request.post.get( "Phone")#オプションフィールド#2。基本的なデータ検証(これは単純な例です。実際のプロジェクトでより完全なものにする必要があります)
        そうでない場合(username and email_addressとpasswordとpassword_confirm):
            messages.error(リクエスト、「必要なすべてのフィールドに記入してください。」)
            return render(request、 "signupage.html")

        パスワードの場合!= password_confirm:
            messages.error(リクエスト、「2回入力されたパスワードは一貫性がありません。」)
            return render(request、 "signupage.html")

        user.objects.filter(username = username).exists()の場合:
            message.error(リクエスト、「このユーザー名は登録されています。」)
            return render(request、 "signupage.html")

        user.objects.filter(email = email_address).exists()の場合:
            message.error(リクエスト、「このメールは登録されています。」)
            return render(request、 "signupage.html")

        試す:
            #3。ユーザーインスタンスを作成してデータベースに保存#Djangoの組み込みユーザーモデルユーザー= user.objects.create_user(username = username、email = email_address、password = password)を使用します。
            #他のフィールドがある場合は、ここに設定できます。たとえば、次のようになります。
            #user.first_name = "..."
            #user.last_name = "..."
            #user.profile.phone_number = phone_number#userprofileモデルがuser.save()に関連付けられていると仮定します

            #4。新しく登録されたユーザーログイン(リクエスト、ユーザー)に自動的にログイン

            #5。成功へのリダイレクトページリターンリダイレクト( "Homepage")#「ホームページ」と呼ばれるURLがあるとします
        eとしての例外を除く:
            messages.error(request、f "登録失敗:{e}")
            return render(request、 "signupage.html")

    それ以外:
        #get requestの場合は、登録フォームページのreturnレンダリングをレンダリングします(リクエスト、 "signupage.html"))

キーポイント:

  • request.method == "post" ::要求方法がpostかどうかを判断します。フォームで送信されたデータのみが含まれています。
  • request.post.get( "fieldname"):これは、POSTリクエストからフォームデータを取得する方法です。 「FieldName」は、HTMLフォームの入力タグの名前属性値に対応します。 .get()メソッドを使用すると、request.post ["fieldname"]が直接リクエストよりも安全です。キーがキーエローを投げる代わりに存在しない場合に何も返されないためです。
  • django.contrib.auth.modelsからインポートユーザー:Djangoの組み込みユーザーモデルをインポートします。
  • user.objects.create_user(username = username、email = email_address、password = password):これは、新しいユーザーを作成するための推奨方法です。パスワードのハッシュ(暗号化)を自動的に処理し、パスワードがプレーンテキストのデータベースに保存されないようにし、セキュリティを大幅に強化します。
  • user.save():新しく作成されたユーザーオブジェクトをデータベースに保存します。
  • ログイン(リクエスト、ユーザー):ユーザーが正常に登録された後、すぐにシステムにログインしてユーザーエクスペリエンスを改善できます。
  • Redirect( "HomePage"):POSTリクエストが成功した後、ベストプラクティスは、ユーザーがページを更新し、フォームを繰り返し送信するのを防ぐために、別のページ(通常はユーザーダッシュボードまたはホームページ)にリダイレクトすることです。
  • render(request、 "signupage.html"):get requestsの場合、登録フォームを含むテンプレートをレンダリングします。 Post Request Processionが失敗すると、通常はエラーメッセージが伝わる登録ページにも返されます。
  • データ検証とエラー処理:実際のアプリケーションでは、データ検証は重要なステップです。上記のコードには、基本的な非空白のチェック、パスワードの一貫性チェック、ユーザー名/電子メールの再現性チェックが追加されます。より複雑な検証(メールボックス形式、パスワード強度など)は通常、Djangoフォームを使用して処理されます。これは、より構造化された再利用可能な検証メカニズムを提供します。メッセージフレームワークを使用して、ユーザーに友好的なフィードバックを表示できます。

メモとベストプラクティス

  1. セキュリティが主な考慮事項です。
    • CSRFトークン:常に{%csrf_token%}を投稿形式で使用します。
    • パスワードハッシュ:プレーンテキストにパスワードを保存しないでください。 user.objects.create_user()またはuser.set_password()を使用して、パスワードを自動的にハッシュします。
    • データ検証:サーバー側のすべてのユーザー入力を厳密に検証して、悪意のあるデータインジェクションとアプリケーションのクラッシュを防ぎます。
  2. 名前属性を使用してデータを取得します。Djangoは、ID属性ではなく、HTML要素の名前属性を介してフォームフィールドを認識します。
  3. redirect-getモード: POSTリクエストの処理に正常に処理した後、Redirect()をRedirectに使用してください。これにより、ユーザーがページを更新するとフォームの繰り返しの送信が防止され、「フォームの繰り返し提出」のブラウザ警告が回避されます。
  4. エラー処理とユーザーフィードバック:明確なユーザーフィードバックを提供することが非常に重要です。フォームの送信が失敗した場合、ユーザーは特定のエラーメッセージで表示され、修正することを許可する必要があります。 Djangoのメッセージフレームワークは素晴らしい選択です。
  5. Django Forms:より複雑なフォームとより厳格なデータ検証要件については、Djangoのフォームモジュールモジュールを使用することを強くお勧めします。フォーム構造を定義し、検証を実行し、フォームフィールドをレンダリングし、エラーを処理する強力で柔軟なフレームワークを提供します。このチュートリアルでは、Request.post.get()の直接的な方法を使用していますが、Django Formsは生産環境でより専門的で効率的な選択です。
  6. カスタムユーザーモデル:組み込みのユーザーモデルがニーズを満たすことができない場合、カスタムユーザーモデルを作成できます。ただし、これにはより複雑な構成と移行が含まれることに注意してください。

要約します

このチュートリアルを通して、DjangoでHTMLフォームを構築し、URLルーティングを構成し、フォームの提出を処理するビュー関数を書き込む方法を学びました。コアプロセスには、HTMLにCSRF_TOKENと名前属性の追加、URLS.PYのURLパターンの定義、およびrequest.method == "post"を使用してviews.pyのリクエストタイプを決定し、request.post.get()を介してデータを抽出し、ジュンゴの組み込みユーザーモデルを使用してユーザーを安全に保存します。これらの手順とベストプラクティスに従って、ユーザー登録およびその他のフォームデータ処理機能は、Djangoアプリケーションで効果的に実装できます。

以上がDjangoを使用してHTMLフォームデータとユーザー登録を処理するためのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ホットトピック

CSSのヒント:親要素に影響を与えることなく、特定のテキストコンテンツを正確に非表示にする CSSのヒント:親要素に影響を与えることなく、特定のテキストコンテンツを正確に非表示にする Sep 16, 2025 pm 10:54 PM

このチュートリアルは、CSSを使用してHTMLページの特定のテキストコンテンツを正確に非表示にする方法を詳しく説明し、不適切なセレクターのために親要素全体が非表示になっているという問題を回避します。ターゲットテキストのラッピング要素に排他的なCSSクラスを追加し、ディスプレイを使用して以下を使用します。属性、開発者はページ要素の洗練された制御を実現し、必要な部品のみが隠されていることを確認し、それによりページレイアウトとユーザーエクスペリエンスを最適化します。

クロスドメインのiframesを含む親要素を含むムーズダウンイベントをキャプチャ:原則と制限 クロスドメインのiframesを含む親要素を含むムーズダウンイベントをキャプチャ:原則と制限 Sep 20, 2025 pm 11:00 PM

この記事では、クロスドメインのiframesを含む親divでムースタウンイベントをキャプチャするという課題について説明します。中心的な問題は、ブラウザのセキュリティポリシー(同じオリジンポリシー)が、ドメインクロスIFRAMEコンテンツでの直接DOMイベントリスニングを防ぐことです。このタイプのイベントキャプチャは、IFRAMEソースドメイン名が制御され、CORSが構成されていない限り、実現できません。この記事では、これらのセキュリティメカニズムを詳細に説明し、イベントインタラクションに関する制限を説明し、可能な代替案を提供します。

HTMLの画像をテキストラップする方法は? HTMLの画像をテキストラップする方法は? Sep 21, 2025 am 04:02 AM

USECSSFLOATPROPERTYTOWRAPTEXTARONDANIMAGE:floatleftortextontontheright、floatrightextontontheleft、addmarginforspacing、およびclearfloatstopreventlayoutissues。

Lang属性をHTMLに設定する方法 Lang属性をHTMLに設定する方法 Sep 21, 2025 am 02:34 AM

setthelangattributionthehtmltagtospecifypagelanangage、たとえば、たとえば、forenglish;

JavaScript外部関数コール難易度分析:スクリプトの場所と命名仕様 JavaScript外部関数コール難易度分析:スクリプトの場所と命名仕様 Sep 20, 2025 pm 10:09 PM

この記事では、HTMLで外部JavaScript関数を呼び出す際の2つの一般的な問題を調査します。スクリプトの読み込み時間が不適切になり、DOM要素が準備ができていません。また、関数の命名は、ブラウザの組み込みイベントまたはキーワードと競合する場合があります。この記事では、スクリプト参照位置の調整や、JavaScriptコードが正しく実行されることを確認するための優れた関数の命名仕様に従って、詳細なソリューションを提供します。

HTMLのホバーにツールチップを追加する方法は? HTMLのホバーにツールチップを追加する方法は? Sep 18, 2025 am 01:16 AM

UsethetitLeattributeForsimpletOultipsOrcsSorcustom-styledones.1.addtitle = "text" to nayelementfordefaultTooltips.2.forStyledTooltips、wraptheelementinAcontainer、use.tooltipand.tooltiptextextextexcscstioning、pseudo-spositing、andsoditioning、andvisctioning

HTMLのメールアドレスへのハイパーリンクを作成する方法は? HTMLのメールアドレスへのハイパーリンクを作成する方法は? Sep 16, 2025 am 02:24 AM

usemailto:inhreftocreateemaillinks.startwithforbasiclinks、add?subject = and&body = forpre-fillcontent、およびincludemultipreaddresseSorcc =、bcc = foradvencedoptions。

ブートストラップフレックスボックスレイアウトに要素の垂直スタッキングを実装する:側面からレイヤー ブートストラップフレックスボックスレイアウトに要素の垂直スタッキングを実装する:側面からレイヤー Sep 21, 2025 pm 10:42 PM

WebページレイアウトにBootstrapを使用する場合、開発者は、特に親コンテナがFlexBoxレイアウトを適用する場合、デフォルトで垂直に積み重ねられたものではなく、並べ替えられる要素の問題に遭遇することがよくあります。この記事では、この共通のレイアウトチャレンジを詳細に調べて解決策を提供します。BootstrapのFlex-Column Toolクラスを使用して、Flex-Direction属性を列に調整して、フォームなどのH1タグとコンテンツブロックの正しい垂直方向の配置を実現し、ページ構造が期待を満たすことを保証します。

See all articles