ホームページ >バックエンド開発 >Python チュートリアル >フラスコへのイントロ:連絡先ページの追加
このミニシリーズの前の記事では、フラスコを使用して、他のフラスコベースのWebアプリに適用できる一般化されたワークフローを使用して、「ホーム」と「約」ページを含むシンプルなWebサイトを構築しました。このレッスンでは、ユーザーがメッセージを送信できるようにする連絡先ページを追加する方法を示します。この記事で使用されているコードはGitHubで見つけることができます。
フラスコ拡張機能
追加機能を使用して出荷する代わりに、Flaskの拡張モデルを使用すると、必要に応じて機能を追加できます。 Flask拡張機能は、アプリに特定の機能を追加するパッケージです。たとえば、Flask-Sqlalchemyはアプリにデータベースサポートを追加しますが、Flask-Loginはログイン/ログアウトサポートを追加します。 Flask拡張レジストリに拡張機能の完全なリストを見つけることができます。
連絡先ページを作成するには、Flask-wtfを使用してフォームデータを処理および検証し、Flask-mailをフォームデータをメールで送信してメールでメールで送信します。それはどういう意味ですか?次の図を見てください:
ユーザーはフォームに記入します。フィールドは検証されません。フォームを含むWebページは、役立つエラーメッセージで再度ロードされ、ユーザーに再試行するように求められます。
フォームを一度だけ定義するのは素晴らしいことです:pythonスクリプト。これはまさにFlask-WTFが私たちにできることです。フォームをPythonスクリプトで一度だけ定義し、Flask-WTFにフォームのHTMLを生成させます。このすべてのポイントは、プレゼンテーションをコンテンツから分離することです。コードしましょう。
フォームを作成して、最初のステップとして、前回作成した孤立した開発環境に戻りましょう。すでに
routes.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 ... elsefrom 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>、
$ 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 サイトの他の関連記事を参照してください。