目次
ユーザーは、フォームを含むWebページのGETリクエストを発行します。
があり、機能するようにURLをマッピングしています。無関係なコードでそれを乱雑にしないでください。代わりに、
ホームページ バックエンド開発 Python チュートリアル フラスコへのイントロ:連絡先ページの追加

フラスコへのイントロ:連絡先ページの追加

Feb 28, 2025 am 10:03 AM

このミニシリーズの前の記事では、フラスコを使用して、他のフラスコベースのWebアプリに適用できる一般化されたワークフローを使用して、「ホーム」と「約」ページを含むシンプルなWebサイトを構築しました。このレッスンでは、ユーザーがメッセージを送信できるようにする連絡先ページを追加する方法を示します。この記事で使用されているコードはGitHubで見つけることができます。 

フラスコ拡張機能


フラスコには、棚から多くの機能が備わっていないため、簡単に習得して学習できます。コンテンツを追加および更新するためのデータベースインタラクションまたは管理インターフェイス用のオブジェクトリレーショナルマッパーはありません。既に使用している2つの関数のみを提供します。Render_template()

追加機能を使用して出荷する代わりに、Flaskの拡張モデルを使用すると、必要に応じて機能を追加できます。 Flask拡張機能は、アプリに特定の機能を追加するパッケージです。たとえば、Flask-Sqlalchemyはアプリにデータベースサポートを追加しますが、Flask-Loginはログイン/ログアウトサポートを追加します。 Flask拡張レジストリに拡張機能の完全なリストを見つけることができます。

連絡先ページを作成するには、Flask-wtfを使用してフォームデータを処理および検証し、Flask-mailをフォームデータをメールで送信してメールでメールで送信します。それはどういう意味ですか?次の図を見てください:


ユーザーは、フォームを含むWebページのGETリクエストを発行します。

ユーザーはフォームに記入します。フィールドは検証されません。フォームを含むWebページは、役立つエラーメッセージで再度ロードされ、ユーザーに再試行するように求められます。

flask-wtf diagramすべてのフィールドが検証する場合、フォーム情報はパイプラインの次のステップで使用されます。フラスコでは、フォームを
    routes.py
  1. 内部の関数に投稿します。この関数はフォームハンドラーと呼ばれます。いくつかの検証チェックを実行します。入力のいずれかがマスターに合格しない場合は、ページを更新してエラーを説明するメッセージを表示します。すべての検証チェックが渡されたら、次のステップにフォームデータを使用します。これは、Webサイトの所有者であるメッセージをメールで送信します。
  2. フォームの取り扱いと検証の仕組みです。今、私たちは実際にどこでフォームを定義しますか? pythonスクリプトへのアクション
  3. 属性を使用してHTMLを記述できます。 Pythonスクリプトは、各フォームフィールドをキャプチャし、フォームフィールドデータを検証するためにフォームをミラーリングします。ただし、この戦略を使用すると、本質的にフォームを2回定義します。フロントエンドとバックエンドの場合は1回です。

    フォームを一度だけ定義するのは素晴らしいことです:pythonスクリプト。これはまさにFlask-WTFが私たちにできることです。フォームをPythonスクリプトで一度だけ定義し、Flask-WTFにフォームのHTMLを生成させます。このすべてのポイントは、プレゼンテーションをコンテンツから分離することです。コードしましょう。

    フォームを作成して、最初のステップとして、前回作成した孤立した開発環境に戻りましょう。すでに

    routes.py

    があり、機能するようにURLをマッピングしています。無関係なコードでそれを乱雑にしないでください。代わりに、

    forms.py

    と呼ばれる新しいファイルを作成し、

    app/
    $ cd flaskapp<br>$ . bin/activate<br>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    フォルダーの内側に配置します。私たちは何をしましたか?まず、&lt; input type = "text"&gt; name&lt;/input&gt;

    から継承するFlask-wtf contactform

    からいくつかの有用なクラスをインポートしました。スクリプト。
    pip install -U Flask-WTF<br>
    ログイン後にコピー
    ログイン後にコピー

    app/routes.py 次に、クロスサイトリクエスト偽造(CSRF)として知られるセキュリティエクスプロイトを処理するようにFlask-wtfを構成します。完璧な世界では、サーバーはWebアプリに属する​​フォームのみを処理します。言い換えれば、サーバーは作成したフォームのみを処理および検証します。ただし、攻撃者が自分のウェブサイトでフォームを作成し、悪意のある情報を入力し、サーバーに送信することができます。サーバーがこの悪意のある情報を受け入れると、あらゆる種類の悪いことが次に発生する可能性があります。

    フォームの提出がWebアプリから発生することを確認することにより、CSRF攻撃を防ぐことができます。これを行う1つの方法は、HTML /連絡先の内部に隠された一意のトークンを保持することです。このWebテンプレートはまもなく作成します。 ここでは、まだやるべきことがあります。上の図は、GETリクエストがサーバーに送信された場合、フォームを含むWebページを取得してブラウザにロードする必要があることを示しました。サーバーがPOSTリクエストを受信した場合、関数はフォームフィールドデータをキャプチャし、有効かどうかを確認する必要があります。 Pythonの用語では、このロジックは、前の記事でrender_template()

    のif ... else
    from flask_wtf import FlaskForm<br>from wtforms import StringField, TextAreaField, SubmitField<br><br><br><br>class ContactForm(FlaskForm):<br>  name = StringField("Name")<br>  email = StringField("Email")<br>  subject = StringField("Subject")<br>  message = TextAreaField("Message")<br>  submit = SubmitField("Send") <br>
    ログイン後にコピー
    ログイン後にコピー
    ロジックで表現できます。したがって、ここでは、現在のHTTPメソッドがGETまたは投稿であるかどうかを決定します。次は、contact()

    function(行9-13)です。 POSTリクエストの場合、フォームが投稿されたことを示す文字列が返されます。

    この文字列は一時的なプレースホルダーであり、この記事の最終ステップで実際のコードに置き換えます。それ以外の場合、リクエストがgetを使用した場合、フォームを含むWebテンプレートcontact.html。フォルダー。

    app/templates/contact.html

    home.htmland

    about.html
    $ cd flaskapp<br>$ . bin/activate<br>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    extends へのアクション属性を設定することにより、送信に関するフォームデータを送信する場所を指定します。 contact()executesにマッピングされます。 html。レンダリングされたhtmlはroutes.pyroutes.pyに送り返されます。ボタン。しかし、ユーザーがフォームに適切に記入しない場合はどうなりますか?ユーザーの入力を検証する必要があります。これにより、後の手順で問題が発生しないようにします。フォーム検証は、フォームバリデーターを使用して実行されます。幸いなことに、Flask-WTFには、すぐに使用できる多くの便利な組み込みのバリデーターが付属しています。これらのバリデーターは、[validators = datarequired()]から各フォームフィールドに[validators = datarequired()]
  4. から内蔵されたバリデーターに入力して、その存在を検証します。このバリデーターがPythonリスト内にあることに注意してください。つまり、このリストにさらにバリデーターを簡単に追加できることに注意してください。次に、パターン電子メール() validatorのインストールを必要とするために電子メールアドレスが必要になるため、次のようにPIPをインストールする必要があります。次のとおりです。
  5. フォームの検証に役立ちます。
  6. エラーメッセージの点滅元の図を振り返ると、検証チェックが失敗した場合は、ユーザーがミスを修正してもう一度試してみることができます。このエラーメッセージは、誤りが修正されたときに検証が失敗し、消えるときにのみ表示される必要があります。 Flaskは、スクリプトの先頭にFlash()
  7. 関数を使用することにより、これを非常に簡単にします。
    $ cd flaskapp<br>$ . bin/activate<br>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    連絡先フォームがサーバーに投稿した後、検証障害はフォームを役立つエラーメッセージでリロードする必要があります。それ以外の場合、入力データは将来の処理に使用できます。繰り返しになりますが、このロジックは、ifのifロジックのif request.method == 'post':

    app/routes.py

    pip install -U Flask-WTF<br>
    ログイン後にコピー
    ログイン後にコピー

    で検証チェックが失敗した場合、False

    で表現できます。フォームが正常に送信されたことを示しているに掲載されている

    を示します。次に、これらの一時的なエラーメッセージを受信および表示できるように、
    from flask_wtf import FlaskForm<br>from wtforms import StringField, TextAreaField, SubmitField<br><br><br><br>class ContactForm(FlaskForm):<br>  name = StringField("Name")<br>  email = StringField("Email")<br>  subject = StringField("Subject")<br>  message = TextAreaField("Message")<br>  submit = SubmitField("Send") <br>
    ログイン後にコピー
    ログイン後にコピー

    contact.htmlを変更しましょう。次のブロックを参照してください:

    ループの関数。このコードブロックを

    contact.htmlafter&lt; form&gt;タグに追加します。プリティ。

    from flask import Flask, render_template<br>from forms import ContactForm<br>
    ログイン後にコピー

    Main.CSS ]をクリックして、フォームの検証とエラーメッセージの点滅作業をテストしてください。検証チェックが失敗した場合、連絡先フォームにエラーメッセージを正常に送信しました。私たちは実際に少しうまくやることができます。すべての失敗した検証チェックに対して1つの一般的なエラーメッセージを持つ代わりに、失敗した検証チェックごとに特定のエラーメッセージがあることをお勧めします。たとえば、ユーザーがサブジェクトフィールドに入力するのを忘れた場合、名前を入力してくださいを入力してください。これを非常に簡単に達成できますので、各バリデーター内に

    フォームに特定のエラーメッセージを書き込むことから始めましょう。次に、これらの特定のエラーメッセージを受信および表示するために、

    contact.htmlを変更しましょう。以前は、各フォームフィールドの関数エラー属性に依存して、特定のエラーメッセージをプルし、jinja2メッセージ

    とメッセージ
    {% extends "layout.html" %}<br>{% block content %}<br><br>  <h2>Contact</h2><br>  <br>  <form action="{{ url_for('contact') }}" method=post><br>    {{ form.hidden_tag() }}<br>    {{ form.name.label }}<br>    {{ form.name }}<br>    {{ form.email.label }}<br>    {{ form.email }}<br>    {{ form.subject.label }}<br>    {{ form.subject }}<br>    {{ form.message.label }}<br>    {{ form.message }}<br>    {{ form.submit }}<br>  </form><br>{% endblock %}<br>
    ログイン後にコピー
    クラスを使用してそれらの上にループし、新しい電子メールとapp.config ["mail_username"]

    おそらく、グループがsupport@example.comのような連絡先メールアドレスを使用しているのを見たことがあります。独自のドメインを所有していて、新しい連絡先メールアドレスを作成できる場合は、先に進んで、そのメールアドレスをrequest.method == 'post':ブロックに入れてください。フォーム内にロジックを既に追加しています。validate()は他のブロックになります。したがって、メッセージの内部にロジックを追加して、クラスに件名、「from」アドレス、および "アドレスを取ります。次に、app.config ["mail_username"]を使用して、連絡先フォームのサブジェクトフィールドデータを収集します。電子メールは個人のメールアドレスに送信され、新しいメッセージを受信して​​応答できます。

    次に、メール自体(11〜14行目)を書きます。ユーザーの名前、電子メール、メッセージを含めます。 Pythonの文字列フォーマットオペレーターMail.send(MSG)を使用して、電子メールを送信します(15行目)。 http:// localhost:5000/contactにアクセスし、各フィールドに記入し、[送信]をクリックします。すべてがうまくいけば、Flaskアプリから新しい電子メールが届きます。

    contact.html

    true

    を配置します。ありがとうメッセージを表示します。それ以外の場合は、連絡先フォームを表示します。

    routes.py

    で開始しました。 %}は、routes.pyから送信した成功フラグが&lt; p&gt;あなたのメッセージに感謝している場合を意味します。まもなくご連絡いたします。それ以外の場合は、&lt; header&gt;要素を使用して... else

    ステートメントに従ってください。また、連絡先ページ(8行目)(

    フラスコ拡張機能は、フラスコベースのアプリの機能を拡張するシンプルで強力なツールです。

    Flask Extensionレジストリをチェックして、アプリに統合できるさらに多くの拡張機能を調査してください。

以上がフラスコへのイントロ:連絡先ページの追加の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Python vs. C:比較されたアプリケーションとユースケース Python vs. C:比較されたアプリケーションとユースケース Apr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ 2時間のPython計画:現実的なアプローチ Apr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:ゲーム、GUIなど Python:ゲーム、GUIなど Apr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

2時間でどのくらいのPythonを学ぶことができますか? 2時間でどのくらいのPythonを学ぶことができますか? Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:主要なアプリケーションの調査 Python:主要なアプリケーションの調査 Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

Python vs. C:パフォーマンスと効率の探索 Python vs. C:パフォーマンスと効率の探索 Apr 18, 2025 am 12:20 AM

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

See all articles