Flask-quick-guide
フラスコ–概要
Web Frameworkとは何ですか?
Web Application Frameworkまたは単にWeb Frameworkは、プロトコルやスレッド管理などの低レベルの詳細を気にすることなく、Webアプリケーション開発者がアプリケーションを作成できるようにするライブラリとモジュールのコレクションを表します。
フラスコとは何ですか?
FlaskはPythonで書かれたWebアプリケーションフレームワークです。 Poccoという名前の国際的なPython愛好家グループを率いる Armin Ronacher によって開発されました。 Flaskは、Werkzeug WSGIツールキットとJinja2テンプレートエンジンに基づいています。 どちらもPoccoプロジェクトです。
WSGI
Web Server Gateway Interface(WSGI)は、Python Webアプリケーション開発の標準として採用されています。 WSGIは、WebサーバーとWebアプリケーション間のユニバーサルインターフェイスの仕様です。
ヴェルクゼウグ
これは、要求、応答オブジェクト、およびその他のユーティリティ機能を実装するWSGIツールキットです。 これにより、その上にWebフレームワークを構築できます。 Flaskフレームワークは、そのベースの1つとしてWerkzeugを使用します。
ジンジャ2
Jinja2は、Python用の人気のあるテンプレートエンジンです。 Webテンプレートシステムは、テンプレートを特定のデータソースと組み合わせて、動的なWebページをレンダリングします。
フラスコは、多くの場合、マイクロフレームワークと呼ばれます。 これは、アプリケーションのコアをシンプルかつ拡張可能にすることを目的としています。 Flaskには、データベース処理用の組み込み抽象化レイヤーがなく、検証サポートもありません。 代わりに、Flaskはそのような機能をアプリケーションに追加する拡張機能をサポートしています。 人気のあるFlask拡張機能の一部については、チュートリアルの後半で説明します。
フラスコ–環境
前提条件
通常、FlaskのインストールにはPython 2.6以降が必要です。 Flaskとその依存関係はPython 3(Python 3.3以降)で正常に機能しますが、多くのFlask拡張機能では適切にサポートされていません。 そのため、FlaskはPython 2.7にインストールすることをお勧めします。
開発環境のvirtualenvをインストールする
次のコマンドは virtualenv をインストールします
このコマンドには管理者権限が必要です。 Linux/Mac OSでは、 pip の前に sudo を追加します。 Windowsを使用している場合は、管理者としてログインします。 Ubuntuでは、パッケージマネージャーを使用して virtualenv をインストールできます。
インストールすると、新しい仮想環境がフォルダーに作成されます。
対応する環境をアクティブにするには、 Linux/OS X で、次を使用します-
これで、Flaskをこの環境にインストールする準備が整いました。
上記のコマンドは、システム全体のインストール用の仮想環境なしで直接実行できます。
フラスコ–アプリケーション
プロジェクトへのフラスコモジュールのインポートは必須です。 Flaskクラスのオブジェクトは、 WSGI アプリケーションです。
Flaskコンストラクターは、* currentモジュール(name)*の名前を引数として取ります。
Flaskクラスの* route()*関数はデコレータであり、関連付けられた関数を呼び出すURLをアプリケーションに通知します。
- rule パラメーターは、関数とのURLバインディングを表します。
- options は、基になるRuleオブジェクトに転送されるパラメーターのリストです。
上記の例では、 ’/’ URLは* hello_world()*関数にバインドされています。 したがって、Webサーバーのホームページをブラウザーで開くと、この関数の出力がレンダリングされます。
最後に、Flaskクラスの* run()*メソッドは、ローカル開発サーバーでアプリケーションを実行します。
すべてのパラメーターはオプションです
Sr.No. | Parameters & Description |
---|---|
1 |
host リッスンするホスト名。 デフォルトは127.0.0.1(localhost)です。 サーバーを外部で使用できるようにするには、「0.0.0.0」に設定します |
2 |
port デフォルトは5000 |
3 |
debug デフォルトはfalseです。 trueに設定されている場合、デバッグ情報を提供します |
4 |
options 基礎となるWerkzeugサーバーに転送されます。 |
上記の Python スクリプトは、Pythonシェルから実行されます。
Pythonシェルのメッセージはそれを知らせます
ブラウザで上記のURL* (localhost:5000)*を開きます。 *「Hello World」*メッセージが表示されます。
デバッグモード
デバッグ*モードを有効にするには、 *application オブジェクトの debug プロパティを True に設定してから、実行するか、デバッグパラメーターを* run()*メソッドに渡します。
フラスコ–ルーティング
最新のWebフレームワークでは、ルーティング手法を使用して、ユーザーがアプリケーションのURLを記憶できるようにします。 ホームページから移動することなく、目的のページに直接アクセスすると便利です。
Flaskの* route()*デコレータは、URLを関数にバインドするために使用されます。 たとえば-
ここでは、URL ’/hello’ ルールが* hello_world()関数にバインドされています。 その結果、ユーザーが *http://localhost:5000/hello URLにアクセスすると、* hello_world()*関数の出力がブラウザーにレンダリングされます。
上記の例のように、アプリケーションオブジェクトの* add_url_rule()関数を使用してURLを関数にバインドすることもできます。 route()*が使用されます。
デコレータの目的は、次の表現によっても提供されます-
フラスコ–可変ルール
ルールパラメータに変数部分を追加することにより、URLを動的に構築することができます。 この変数部分は、 <変数名> としてマークされます。 これは、ルールが関連付けられている関数にキーワード引数として渡されます。
次の例では、* route()デコレータのルールパラメータには、URL *’/hello’ に付加された <name> 変数部分が含まれています。 したがって、ブラウザで http://localhost:5000/hello/finddevguides が URL として入力されると、 'TutorialPoint' が引数として* hello()*関数に提供されます。
上記のスクリプトを hello.py として保存し、Pythonシェルから実行します。 次に、ブラウザーを開き、URL * http://localhost:5000/hello/finddevguides。*を入力します。
次の出力がブラウザに表示されます。
デフォルトの文字列変数部分に加えて、次のコンバータを使用してルールを構築できます-
Sr.No. | Converters & Description |
---|---|
1 |
int 整数を受け入れます |
2 |
float 浮動小数点値の場合 |
3 |
path ディレクトリ区切り文字として使用されるスラッシュを受け入れます |
次のコードでは、これらすべてのコンストラクターが使用されています。
Pythonシェルから上記のコードを実行します。 ブラウザーでURL http://localhost:5000/blog/11 にアクセスします。
指定された番号は、* show_blog()*関数の引数として使用されます。 ブラウザは次の出力を表示します-
ブラウザにこのURLを入力します- http://localhost:5000/rev/1.1
- revision()*関数は、引数として浮動小数点数を使用します。 次の結果がブラウザウィンドウに表示されます-
FlaskのURLルールは、* Werkzeugの*ルーティングモジュールに基づいています。 これにより、形成されるURLが一意であり、Apacheが作成した先例に基づいていることが保証されます。
次のスクリプトで定義されたルールを考慮してください-
両方の規則は似ていますが、2番目の規則では、末尾のスラッシュ*(/)が使用されます。 その結果、それは正規のURLになります。 したがって、[。underline]# */python #または[.underline]# /python/ #を使用しても同じ出力が返されます。 ただし、最初のルールの場合、[。underline]# /flask/ #URLは[.underline]# 404 Not Found #ページになります。 Flask-url-building
Flask – HTTPメソッド
HTTPプロトコルは、World Wide Webでのデータ通信の基盤です。 このプロトコルでは、指定されたURLからデータを取得するさまざまな方法が定義されています。
次の表は、さまざまなhttpメソッドをまとめています-
Sr.No. | Methods & Description |
---|---|
1 |
GET 暗号化されていない形式でデータをサーバーに送信します。 最も一般的な方法。 |
2 |
HEAD GETと同じですが、応答本文はありません |
3 |
POST HTMLフォームデータをサーバーに送信するために使用されます。 POSTメソッドによって受信されたデータは、サーバーによってキャッシュされません。 |
4 |
PUT ターゲットリソースの現在のすべての表現を、アップロードされたコンテンツで置き換えます。 |
5 |
DELETE URLで指定されたターゲットリソースの現在の表現をすべて削除します |
デフォルトでは、Flaskルートは GET リクエストに応答します。 ただし、この設定は、* route()*デコレータにメソッド引数を提供することで変更できます。
URLルーティングでの POST メソッドの使用方法を示すために、最初にHTMLフォームを作成し、 POST メソッドを使用してフォームデータをURLに送信します。
次のスクリプトをloginlとして保存します
次に、Pythonシェルで次のスクリプトを入力します。
開発サーバーの実行が開始されたら、ブラウザーで loginl を開き、テキストフィールドに名前を入力して、[送信]をクリックします。
フォームデータは、formタグのaction節のURLにPOSTされます。
変数部分として ’/success’ URLに渡されます。 ブラウザのウィンドウに welcome メッセージが表示されます。
ここで、 args は、フォームパラメータとそれに対応する値のペアのリストを含む辞書オブジェクトです。 「nm」パラメーターに対応する値は、以前と同様に「/success」URLに渡されます。
フラスコ–テンプレート
特定のURLにバインドされた関数の出力をHTML形式で返すことができます。 たとえば、次のスクリプトでは、* hello()関数は *'hello World' に <h1> タグを付加してレンダリングします。
ただし、PythonコードからHTMLコンテンツを生成することは、特に変数データや条件やループなどのPython言語要素を配置する必要がある場合は面倒です。 これには、HTMLから頻繁にエスケープする必要があります。
ここで、Flaskのベースとなっている Jinja2 テンプレートエンジンを利用できます。 関数からハードコードHTMLを返す代わりに、* render_template()*関数によってHTMLファイルをレンダリングできます。
Flaskは、このスクリプトが存在するのと同じフォルダー内のテンプレートフォルダーでHTMLファイルを見つけようとします。
- アプリケーションフォルダー
- Hello.py
- テンプレート
- こんにちは
- 「ウェブテンプレートシステム」*という用語は、変数データを動的に挿入できるHTMLスクリプトの設計を指します。 Webテンプレートシステムは、テンプレートエンジン、ある種のデータソース、およびテンプレートプロセッサで構成されます。
Flaskは jinja2 テンプレートエンジンを使用します。 Webテンプレートには、変数と式(これらの場合はPython式)のHTML構文が散在するプレースホルダーが含まれており、テンプレートのレンダリング時に値が置き換えられます。
次のコードは、テンプレートフォルダーに hellol として保存されます。
次に、Pythonシェルから次のスクリプトを実行します。
開発サーバーの実行が開始されたら、ブラウザーを開いてURLを入力します- http://localhost:5000/hello/mvl
URLの*変数*部分は、 \ {\ {name}} プレースホルダーに挿入されます。
- \ {%… ステートメントの%}
- \ {\ {… }}は、テンプレートの出力に出力する式
- \ {#… #}テンプレート出力に含まれないコメントの場合 *#… ##行ステートメント
次の例では、テンプレートでの条件ステートメントの使用を示しています。* hello()関数のURLルールは整数パラメーターを受け入れます。 *hellol テンプレートに渡されます。 その中で、受け取った数値(マーク)の値が比較され(50より大きいか小さい)、それに応じてHTMLが条件付きでレンダリングされます。
Pythonスクリプトは次のとおりです-
条件文 if-else および endif は、区切り文字 \ {%..%} で囲まれていることに注意してください。
Pythonスクリプトを実行し、URL http://localhost/hello/60 にアクセスしてから、 http://localhost/hello/30 にアクセスして、条件に応じて変化するHTMLの出力を確認します。
Pythonループ構造は、テンプレート内でも使用できます。 次のスクリプトでは、* result()関数は、ブラウザーでURL *http://localhost:5000/result が開かれると、テンプレート resultsl に辞書オブジェクトを送信します。
Pythonシェルから次のコードを実行します。
次のHTMLスクリプトを resultl としてテンプレートフォルダーに保存します。
ここでも、 For ループに対応するPythonステートメントは\ {%..%}で囲まれていますが、式 keyおよびvalue は \ {\ {}} 内に配置されています。
開発の実行が開始されたら、ブラウザーで http://localhost:5000/result を開き、次の出力を取得します。
フラスコ–静的ファイル
Webアプリケーションでは、多くの場合、Webページの表示をサポートする javascript ファイルや CSS ファイルなどの静的ファイルが必要です。 通常、Webサーバーはそれらを提供するように構成されていますが、開発中、これらのファイルはパッケージの_static_フォルダーまたはモジュールの隣から提供され、アプリケーションの /static で利用可能になります。
静的ファイルのURLを生成するために、特別なエンドポイント「静的」が使用されます。
次の例では、 hello.js で定義された javascript 関数が、Flaskアプリケーションの ‘/’ URLでレンダリングされる indexl のHTMLボタンの OnClick イベントで呼び出されます。
フラスコ–リクエストオブジェクト
クライアントのWebページからのデータは、グローバルリクエストオブジェクトとしてサーバーに送信されます。 リクエストデータを処理するには、Flaskモジュールからインポートする必要があります。
リクエストオブジェクトの重要な属性は以下のとおりです-
- フォーム-フォームパラメータとその値のキーと値のペアを含む辞書オブジェクトです。
- args -疑問符(?)の後のURLの一部であるクエリ文字列の解析されたコンテンツ。
- * Cookies-Cookieの名前と値を保持する辞書オブジェクト。
- ファイル-アップロードされたファイルに関するデータ。
- method -現在のリクエストメソッド。
Flask –フォームデータをテンプレートに送信
httpメソッドがURLルールで指定できることはすでに見ました。 トリガーされた関数によって受信された Form データは、それを辞書オブジェクトの形式で収集し、テンプレートに転送して、対応するWebページでレンダリングできます。
次の例では、 ‘/’ URLはフォームを持つWebページ(studentl)をレンダリングします。 入力されたデータは* result()関数をトリガーする *’/result’ URLに投稿されます。
- results()関数は、辞書オブジェクトの *request.form に存在するフォームデータを収集し、レンダリングするために resultl に送信します。
このテンプレートは、*フォーム*データのHTMLテーブルを動的にレンダリングします。
以下は、アプリケーションのPythonコードです-
以下は studentl のHTMLスクリプトです。
テンプレート*(resultl)*のコードを以下に示します-
Pythonスクリプトを実行し、ブラウザーにURL http://localhost:5000/ を入力します。
[送信]ボタンをクリックすると、フォームデータがHTMLテーブルの形式で*結果*にレンダリングされます。
フラスコ–クッキー
Cookieは、テキストファイルの形式でクライアントのコンピューターに保存されます。 その目的は、クライアントの使用状況に関するデータを記憶して追跡し、訪問者のエクスペリエンスとサイトの統計を改善することです。
- リクエストオブジェクト*にはCookieの属性が含まれています。 これは、クライアントが送信したすべてのCookie変数とそれに対応する値の辞書オブジェクトです。 それに加えて、Cookieは、サイトの有効期限、パス、およびドメイン名も保存します。
Flaskでは、Cookieは応答オブジェクトに設定されます。 * make_response()関数を使用して、ビュー関数の戻り値から応答オブジェクトを取得します。 その後、応答オブジェクトの set_cookie()*関数を使用してCookieを保存します。
Cookieの読み取りは簡単です。 request.cookies 属性の* get()*メソッドは、Cookieの読み取りに使用されます。
次のFlaskアプリケーションでは、 ’/’ URLにアクセスすると簡単なフォームが開きます。
このHTMLページには1つのテキスト入力が含まれています。
フォームは ’/setcookie’ URLに投稿されます。 関連するビュー関数は、Cookie名 userID を設定し、別のページをレンダリングします。
アプリケーションを実行し、 http://localhost:5000/ にアクセスします
クッキーを設定した結果はこのように表示されます-
リードバックCookieの出力を以下に示します。
フラスコ–セッション
Cookieと同様に、セッションデータはクライアントに保存されます。 セッションは、クライアントがサーバーにログインしてログアウトする時間間隔です。 このセッションで保持する必要があるデータは、クライアントブラウザーに保存されます。
各クライアントとのセッションには、セッションID *が割り当てられます。 セッションデータはCookieの上に保存され、サーバーはそれらに暗号的に署名します。 この暗号化のために、Flaskアプリケーションには定義済みの *SECRET_KEY が必要です。
セッションオブジェクトは、セッション変数と関連する値のキーと値のペアを含む辞書オブジェクトでもあります。
たとえば、 'username' セッション変数を設定するには、次のステートメントを使用します-
セッション変数を解放するには、* pop()*メソッドを使用します。
次のコードは、Flaskでのセッション作業の簡単なデモです。 セッション変数 'username' が設定されていないため、URL ‘/’ はユーザーにログインを促すだけです。
ユーザーがGETメソッドを介して呼び出されるため、ユーザーがlogin()ビュー関数を「/login」に参照すると、ログインフォームが開きます。
フォームが ’/login’ にポストバックされ、セッション変数が設定されました。 アプリケーションは ’/’ にリダイレクトされます。 今回は、セッション変数 'username' が見つかりました。
アプリケーションには、* logout()ビュー関数も含まれています。この関数は、セッション変数「ユーザー名」*をポップアウトします。 したがって、 *’/’ URLは再びオープニングページを表示します。
アプリケーションを実行し、ホームページにアクセスします。 (アプリケーションの secret_key を設定してください)
出力は次のように表示されます。 リンク「*ここをクリックしてログイン」*をクリックします。
リンクは別の画面に送られます。 「admin」と入力します。
画面に*「管理者としてログイン」*というメッセージが表示されます。
フラスコ–リダイレクトとエラー
Flaskクラスには* redirect()*関数があります。 呼び出されると、応答オブジェクトを返し、指定されたステータスコードで別のターゲットの場所にユーザーをリダイレクトします。
- redirect()*関数のプロトタイプは以下のとおりです-
上記の機能では-
- location パラメーターは、応答をリダイレクトするURLです。
- statuscode はブラウザのヘッダーに送信され、デフォルトは302です。
- response パラメーターは、応答をインスタンス化するために使用されます。
次のステータスコードが標準化されています-
- HTTP_300_MULTIPLE_CHOICES
- HTTP_301_MOVED_PERMANENTLY
- HTTP_302_FOUND
- HTTP_303_SEE_OTHER
- HTTP_304_NOT_MODIFIED
- HTTP_305_USE_PROXY
- HTTP_306_RESERVED
- HTTP_307_TEMPORARY_REDIRECT
デフォルトのステータス*コードは *302 で、これは 'found' 用です。
次の例では、* redirect()*関数を使用して、ログイン試行が失敗したときにログインページを再度表示します。
Flaskクラスには、エラーコード付きの* abort()*関数があります。
- コード*パラメータは、次の値のいずれかを取ります-
- 400 -不正なリクエストの場合
- 401 -認証されていない場合
- 403 -Forbiddenの場合
- 404 -見つかりません
- 406 -受け入れられない
- 415 -サポートされていないメディアタイプ
- 429 -リクエストが多すぎる
上記のコードの* login()関数に少し変更を加えましょう。 ログインページを再表示する代わりに、「非認証」ページを表示する場合は、 abort(401)*の呼び出しに置き換えます。
フラスコ–メッセージの点滅
優れたGUIベースのアプリケーションは、相互作用に関するフィードバックをユーザーに提供します。 たとえば、デスクトップアプリケーションはダイアログまたはメッセージボックスを使用し、JavaScriptは同様の目的でアラートを使用します。
Flask Webアプリケーションでは、このような情報メッセージの生成は簡単です。 Flaskフレームワークのフラッシュシステムにより、1つのビューでメッセージを作成し、 next と呼ばれるビュー関数でレンダリングすることができます。
Flaskモジュールには* flash()*メソッドが含まれています。 通常はテンプレートである次のリクエストにメッセージを渡します。
ここに、
- message パラメータは、フラッシュされる実際のメッセージです。
- category パラメーターはオプションです。 「エラー」、「情報」または「警告」のいずれかです。
セッションからメッセージを削除するために、テンプレートは* get_flashed_messages()*を呼び出します。
両方のパラメーターはオプションです。 受信したメッセージにカテゴリがある場合、最初のパラメーターはタプルです。 2番目のパラメーターは、特定のメッセージのみを表示するのに役立ちます。
以下は、テンプレートで受信したメッセージをフラッシュします。
ここで、Flaskのフラッシュメカニズムを示す簡単な例を見てみましょう。 次のコードでは、 ’/’ URLがログインページへのリンクを表示し、フラッシュするメッセージはありません。
このリンクは、ログインフォームを表示する ’/login’ URLにユーザーを誘導します。 送信されると、* login()ビュー関数はユーザー名とパスワードを検証し、それに応じて「成功」メッセージを点滅させるか、「エラー」*変数を作成します。
- エラー*の場合、ログインテンプレートはエラーメッセージとともに再表示されます。
ログイン
一方、 login が成功すると、インデックステンプレートで成功メッセージがフラッシュされます。
インデクス
Flaskメッセージフラッシュの例の完全なコードを以下に示します-
Flash.py
上記のコードを実行すると、次のような画面が表示されます。
リンクをクリックすると、ログインページが表示されます。
ユーザー名とパスワードを入力します。
[ログイン]をクリックします。 「あなたは正常にログインしました」というメッセージが表示されます。
フラスコ–ファイルのアップロード
Flaskでのファイルアップロードの処理は非常に簡単です。 enctype属性が「multipart/form-data」に設定されたHTMLフォームが必要で、ファイルをURLにポストします。 URLハンドラーは、 request.files [] オブジェクトからファイルを取得し、目的の場所に保存します。
アップロードされた各ファイルは、実際に最終的な場所に保存される前に、まずサーバー上の一時的な場所に保存されます。 宛先ファイルの名前は、ハードコーディングするか、 request.files [file] オブジェクトのfilenameプロパティから取得できます。 ただし、* secure_filename()*関数を使用して安全なバージョンを取得することをお勧めします。
Flaskオブジェクトの構成設定で、デフォルトのアップロードフォルダーのパスとアップロードされるファイルの最大サイズを定義することができます。
app.config[‘UPLOAD_FOLDER’] | Defines path for upload folder |
app.config[‘MAX_CONTENT_PATH’] | Specifies maximum size of file yo be uploaded – in bytes |
次のコードには、テンプレートフォルダーから ‘uploadl’ を表示する ‘/upload’ URLルールと、アップロードプロセスを処理する* uploader()関数を呼び出す *‘/upload-file’ URLルールがあります。
- 「uploadl」*には、ファイル選択ボタンと送信ボタンがあります。
以下に示す画面が表示されます。
ファイルを選択した後、[送信]をクリックします。 フォームのpostメソッドは ’/upload_file’ URLを呼び出します。 基礎となる関数* uploader()*が保存操作を実行します。
以下は、FlaskアプリケーションのPythonコードです。
フラスコ–拡張機能
コア機能には Werkzeug に基づくWSGIおよび Jinja2 に基づくテンプレートエンジンが含まれているため、Flaskはマイクロフレームワークと呼ばれることがよくあります。 さらに、Flaskフレームワークは、 JSON 、静的ファイルなどのWebヘルパーだけでなく、Cookieとセッションもサポートしています。 明らかに、これは本格的なWebアプリケーションの開発には十分ではありません。 ここで、Flask拡張機能が登場します。 Flask拡張機能は、Flaskフレームワークの拡張性を提供します。
多数のFlask拡張機能が利用可能です。 Flask拡張機能は、特定のタイプのサポートをFlaskアプリケーションに追加するPythonモジュールです。 Flask Extension Registryは、利用可能な拡張機能のディレクトリです。 必要な拡張機能は、 pip ユーティリティでダウンロードできます。
このチュートリアルでは、次の重要なFlask拡張機能について説明します-
- Flask Mail -FlaskアプリケーションへのSMTPインターフェイスを提供
- Flask WTF -WTFormsのレンダリングと検証を追加
- Flask SQLAlchemy -FlaskアプリケーションにSQLAlchemyサポートを追加
- Flask Sijax -Sijaxのインターフェース-WebアプリケーションでAJAXを使いやすくするPython/jQueryライブラリ
通常、各タイプの拡張機能は、その使用法に関する広範なドキュメントを提供します。 拡張機能はPythonモジュールであるため、使用するには拡張機能をインポートする必要があります。 Flask拡張機能は通常、flask-fooという名前です。 インポートするには、
0.7以降のFlaskのバージョンでは、構文を使用することもできます-
この使用法では、互換性モジュールをアクティブにする必要があります。 flaskext_compat.pyを実行することでインストールできます
フラスコ–メール
多くの場合、Webベースのアプリケーションには、ユーザー/クライアントにメールを送信する機能が必要です。 Flask-Mail 拡張機能を使用すると、任意の電子メールサーバーと簡単なインターフェイスを簡単にセットアップできます。
最初に、Pipユーティリティを使用してFlask-Mail拡張機能をインストールする必要があります。
次に、次のアプリケーションパラメータの値を設定して、Flask-Mailを設定する必要があります。
Sr.No | Parameters & Description |
---|---|
1 |
MAIL_SERVER 電子メールサーバーの名前/IPアドレス |
2 |
MAIL_PORT 使用するサーバーのポート番号 |
3 |
MAIL_USE_TLS Transport Security Layer暗号化を有効/無効にします |
4 |
MAIL_USE_SSL Secure Sockets Layer暗号化の有効化/無効化 |
5 |
MAIL_DEBUG デバッグのサポート。 デフォルトはFlaskアプリケーションのデバッグステータスです |
6 |
MAIL_USERNAME 送信者のユーザー名 |
7 |
MAIL_PASSWORD 送信者のパスワード |
8 |
MAIL_DEFAULT_SENDER デフォルトの送信者を設定します |
9 |
MAIL_MAX_EMAILS 送信するメールの最大数を設定します |
10 |
MAIL_SUPPRESS_SEND app.testingがtrueに設定されている場合、送信は抑制されます |
11 |
MAIL_ASCII_ATTACHMENTS trueに設定されている場合、ASCIIに変換された添付ファイル名 |
flask-mailモジュールには、以下の重要なクラスの定義が含まれています。
メールクラス
メールメッセージングの要件を管理します。 クラスのコンストラクタは次の形式を取ります-
コンストラクターは、Flaskアプリケーションオブジェクトをパラメーターとして受け取ります。
Mailクラスのメソッド
Sr.No | Methods & Description |
---|---|
1 |
send() Messageクラスオブジェクトの内容を送信します |
2 |
connect() メールホストとの接続を開きます |
3 |
send_message() メッセージオブジェクトを送信します |
メッセージクラス
電子メールメッセージをカプセル化します。 メッセージクラスのコンストラクタにはいくつかのパラメータがあります-
メッセージクラスメソッド
- attach()*-メッセージに添付ファイルを追加します。 このメソッドは、次のパラメータを取ります-
- filename -添付するファイルの名前
- content_type -MIMEタイプのファイル
- data -生ファイルデータ
- disposition -コンテンツの配置(ある場合)。
- add_recipient()*-メッセージに別の受信者を追加します
次の例では、GoogleのgmailサービスのSMTPサーバーがFlask-Mail構成のMAIL_SERVERとして使用されます。
- ステップ1 *-コード内のflask-mailモジュールからMailおよびMessageクラスをインポートします。
- ステップ2 *-Flask-Mailは次の設定に従って構成されます。
- ステップ3 *-Mailクラスのインスタンスを作成します。
ステップ4 *-URLルール( ‘/’)*によってマップされたPython関数でメッセージオブジェクトを設定します。
ステップ5 *-コード全体を以下に示します。 Pythonシェルで次のスクリプトを実行し、 http://localhost:5000/.*にアクセスします
Gmailサービスの組み込みのセキュリティ機能により、このログイン試行がブロックされる場合があります。 セキュリティレベルを下げる必要がある場合があります。 Gmailアカウントにログインし、https://www.google.com/settings/security/lesssecureapps [this]リンクにアクセスしてセキュリティを低下させてください。
フラスコ– WTF
Webアプリケーションの重要な側面の1つは、ユーザーにユーザーインターフェイスを提供することです。 HTMLは <form> タグを提供します。これは、インターフェースの設計に使用されます。 テキスト入力、ラジオ、選択などの*フォーム*要素 適切に使用できます。
ユーザーが入力したデータは、GETメソッドまたはPOSTメソッドのいずれかによって、Httpリクエストメッセージの形式でサーバー側のスクリプトに送信されます。
- サーバー側のスクリプトは、http要求データからフォーム要素を再作成する必要があります。 したがって、実際には、フォーム要素を2回定義する必要があります(HTMLで1回、サーバー側スクリプトで1回)。
- HTMLフォームを使用する別の欠点は、フォーム要素を動的にレンダリングすることが(不可能ではないにしても)難しいことです。 HTML自体は、ユーザーの入力を検証する方法を提供しません。
ここで、柔軟なフォーム、レンダリング、および検証ライブラリである WTForms が役立ちます。 Flask-WTF拡張機能は、この WTForms ライブラリとのシンプルなインターフェースを提供します。
このHTMLの動的生成がどのように機能するかを見てみましょう。
まず、Flask-WTF拡張機能をインストールする必要があります。
インストール済みパッケージには Form クラスが含まれており、ユーザー定義フォームの親として使用する必要があります。
Sr.No | Standard Form Fields & Description |
---|---|
1 |
TextField <input type = 'text'> HTMLフォーム要素を表します |
2 |
BooleanField <input type = 'checkbox'> HTMLフォーム要素を表します |
3 |
DecimalField 数値を小数で表示するためのテキストフィールド |
4 |
IntegerField 整数を表示するためのTextField |
5 |
RadioField <input type = 'radio'> HTMLフォーム要素を表します |
6 |
SelectField 選択フォーム要素を表します |
7 |
TextAreaField <testarea> htmlフォーム要素を表します |
8 |
PasswordField <input type = 'password'> HTMLフォーム要素を表します |
9 |
SubmitField <input type = 'submit'>フォーム要素を表します |
たとえば、テキストフィールドを含むフォームは次のように設計することができます-
レンダリングされると、これは以下に示すように同等のHTMLスクリプトになります。
ユーザー定義フォームクラスはFlaskアプリケーションで使用され、フォームはテンプレートを使用してレンダリングされます。
WTFormsパッケージには、バリデータクラスも含まれています。 フォームフィールドに検証を適用するのに役立ちます。 次のリストは、一般的に使用されるバリデーターを示しています。
Sr.No | Validators Class & Description |
---|---|
1 |
DataRequired 入力フィールドが空かどうかを確認します |
2 |
フィールド内のテキストが電子メールIDの規則に従っているかどうかを確認します |
3 |
IPAddress 入力フィールドのIPアドレスを検証します |
4 |
Length 入力フィールドの文字列の長さが指定された範囲内にあるかどうかを検証します |
5 |
NumberRange 指定された範囲内の入力フィールドの数値を検証します |
6 |
URL 入力フィールドに入力されたURLを検証します |
連絡先フォームの name フィールドに 'DataRequired' 検証ルールを適用します。
フォームオブジェクトの* validate()*関数はフォームデータを検証し、検証が失敗した場合に検証エラーをスローします。 *エラー*メッセージがテンプレートに送信されます。 HTMLテンプレートでは、エラーメッセージは動的にレンダリングされます。
次の例は、上記の概念を示しています。 Contact form のデザインは、*(forms.py)*の下にあります。
バリデーターは Name および Email フィールドに適用されます。
以下は、Flaskアプリケーションスクリプト*(formexample.py)*です。
テンプレート*(contactl)*のスクリプトは次のとおりです-
Pythonシェルで formexample.py を実行し、URL http://localhost:5000/contact にアクセスします。 以下に示すように、 Contact フォームが表示されます。
エラーがある場合、ページは次のようになります-
エラーがない場合は、「成功」*がレンダリングされます。
フラスコ– SQLite
Pythonには SQlite の組み込みサポートがあります。 SQlite3モジュールはPythonディストリビューションに同梱されています。 PythonでのSQLiteデータベースの使用に関する詳細なチュートリアルについては、リンク:/sqlite/sqlite_python [このリンク]を参照してください。 このセクションでは、FlaskアプリケーションとSQLiteの相互作用を確認します。
SQLiteデータベース*「database.db」*を作成し、その中に学生のテーブルを作成します。
Flaskアプリケーションには、3つの*表示*関数があります。
最初の* new_student()関数はURLルール( ‘/addnew’)*にバインドされています。 学生情報フォームを含むHTMLファイルをレンダリングします。
ご覧のとおり、フォームデータは* addrec()関数をバインドする *’/addrec’ URLに投稿されます。
この* addrec()関数は、 *POST メソッドによってフォームのデータを取得し、studentsテーブルに挿入します。 挿入操作の成功またはエラーに対応するメッセージは ‘resultl’ にレンダリングされます。
アプリケーションには、 ’/list’ URLで表される別の* list()関数が含まれています。 学生テーブル内のすべてのレコードを含む *MultiDict オブジェクトとして 'rows' を設定します。 このオブジェクトは listl テンプレートに渡されます。
この listl はテンプレートであり、行セットを反復処理し、データをHTMLテーブルにレンダリングします。
最後に、 ‘/’ URLルールは、アプリケーションのエントリポイントとして機能する ‘homel’ をレンダリングします。
このスクリプトをPythonシェルから実行し、開発サーバーの実行を開始します。 ブラウザの http://localhost:5000/ にアクセスすると、次のようなシンプルなメニューが表示されます-
フォームフィールドに入力して送信します。 基礎となる関数は、学生テーブルにレコードを挿入します。
ホームページに戻り、[リストを表示] *リンクをクリックします。 サンプルデータを示すテーブルが表示されます。
フラスコ– SQLAlchemy
Flask Webアプリケーションで生のSQLを使用してデータベースでCRUD操作を実行するのは退屈です。 代わりに、Pythonツールキットである SQLAlchemy は、アプリケーション開発者にSQLのフルパワーと柔軟性を提供する強力な* ORマッパー*です。 Flask-SQLAlchemyは、FlaskアプリケーションにSQLAlchemyのサポートを追加するFlask拡張機能です。
- ORM(オブジェクト関係マッピング)とは何ですか?*
ほとんどのプログラミング言語プラットフォームはオブジェクト指向です。 一方、RDBMSサーバーのデータはテーブルとして保存されます。 オブジェクト関係マッピングは、オブジェクトパラメータを基になるRDBMSテーブル構造にマッピングする手法です。 ORM APIは、生のSQLステートメントを記述することなくCRUD操作を実行するメソッドを提供します。
このセクションでは、Flask-SQLAlchemyのORMテクニックを研究し、小さなWebアプリケーションを構築します。
- ステップ1 *-Flask-SQLAlchemy拡張機能をインストールします。
- ステップ2 *-このモジュールからSQLAlchemyクラスをインポートする必要があります。
- ステップ3 *-Flaskアプリケーションオブジェクトを作成し、使用するデータベースのURIを設定します。
ステップ4 *-次に、パラメータとしてアプリケーションオブジェクトを使用して、SQLAlchemyクラスのオブジェクトを作成します。 このオブジェクトには、ORM操作のヘルパー関数が含まれています。 また、ユーザー定義モデルの宣言に使用される親Modelクラスも提供します。 以下のスニペットでは、 *students モデルが作成されます。
ステップ5 *-URIに記載されているデータベースを作成/使用するには、 create_all()*メソッドを実行します。
次のセッションメソッドはCRUD操作を実行します-
- db.session.add (model object)-マッピングされたテーブルにレコードを挿入します
- db.session.delete (model object)-テーブルからレコードを削除します
- * model.query.all()*-テーブルからすべてのレコードを取得します(SELECTクエリに対応)。
filter属性を使用して、取得したレコードセットにフィルターを適用できます。 たとえば、学生のテーブルで city = ’Hyderabad’ のレコードを取得するには、次のステートメントを使用します-
このように多くのバックグラウンドがあるので、今度は、学生データを追加するためのアプリケーションのビュー機能を提供します。
アプリケーションのエントリポイントは、 ’/’ URLにバインドされた* show_all()*関数です。 学生のレコードセットテーブルは、パラメータとしてHTMLテンプレートに送信されます。 テンプレート内のサーバー側コードは、HTMLテーブル形式でレコードをレンダリングします。
テンプレート*( ‘show_alll’)*のHTMLスクリプトは次のとおりです-
上記のページには、 ’/new’ URLマッピング* new()関数へのハイパーリンクが含まれています。 クリックすると、学生情報フォームが開きます。 データは *POST メソッドで同じURLに投稿されます。
newl
httpメソッドがPOSTとして検出されると、フォームデータが学生テーブルに追加され、アプリケーションは追加されたデータを表示するホームページに戻ります。
以下に示すのは、アプリケーション*(app.py)*の完全なコードです。
Pythonシェルからスクリプトを実行し、ブラウザーに http://localhost:5000/ と入力します。
- 「生徒を追加」*リンクをクリックして、*生徒情報*フォームを開きます。
フォームに記入して送信します。 送信されたデータとともにホームページが再表示されます。
次のように出力を確認できます。
フラスコ– Sijax
インストール
Flask-Sijaxのインストールは簡単です。
設定
- SIJAX_STATIC_PATH -Sijax javascriptファイルをミラーリングする静的パス。 デフォルトの場所は static/js/sijax です。 このフォルダーには、 sijax.js および json2.js ファイルが保持されます。
- SIJAX_JSON_URI -json2.js静的ファイルをロードするURI
Sijaxは JSON を使用して、ブラウザーとサーバー間でデータを渡します。 つまり、ブラウザーは JSON をネイティブでサポートするか、 json2.js ファイルから JSON サポートを取得する必要があります。
この方法で登録された関数は、デフォルトで POST メソッドを使用してアクセスできないため(およびSijaxはPOST要求を使用するため)、 Sijax 機能を提供できません。
(このような)すべてのSijaxハンドラー関数は、Pythonがオブジェクトメソッドに「自己」を渡すように、少なくとも1つのパラメーターを自動的に受け取ります。 'obj_response' パラメータは、関数がブラウザに応答する方法です。
Sijax要求が検出されると、Sijaxは次のように処理します-
Sijaxアプリケーション
最小限のSijaxアプリケーションコードは次のようになります-
Sijaxがサーバーにリクエスト(特別な* jQuery.ajax()リクエスト)すると、このリクエストは g.sijax.is_sijax_request()によってサーバー上で検出されます。この場合、 *Sijax にリクエストを処理させます。
- g.sijax.register_callback()*を使用して登録されたすべての関数は、ブラウザーからの呼び出し用に公開されます。
- g.sijax.process_request()*を呼び出すと、適切な(以前に登録された)関数を実行し、ブラウザーに応答を返すようSijaxに指示します。
フラスコ–展開
外部から見えるサーバー
開発サーバー上のFlaskアプリケーションは、開発環境がセットアップされているコンピューターでのみアクセスできます。 これはデフォルトの動作です。デバッグモードでは、ユーザーがコンピューター上で任意のコードを実行できるためです。
これにより、オペレーティングシステムはすべてのパブリックIPをリッスンします。
展開
開発環境から本格的な本番環境に切り替えるには、アプリケーションを実際のWebサーバーにデプロイする必要があります。 持っているものに応じて、Flask Webアプリケーションをデプロイするためのさまざまなオプションがあります。
小規模アプリケーションの場合、次のホストプラットフォームのいずれかに展開することを検討できます。これらはすべて、小規模アプリケーションの無料プランを提供します。
- ヘロク
- ドットクラウド
- ウェブファクション
Flaskアプリケーションは、これらのクラウドプラットフォームにデプロイできます。 さらに、FlaskアプリをGoogleクラウドプラットフォームに展開することもできます。 Localtunnelサービスを使用すると、DNSおよびファイアウォールの設定を変更することなく、localhostでアプリケーションを共有できます。
上記の共有プラットフォームの代わりに専用のWebサーバーを使用する場合は、次のオプションがあります。
mod_wsgi
mod_wsgiのインストール
PyPiから直接公式リリースをインストールするには、次を実行できます-
インストールが成功したことを確認するには、start-serverコマンドでmod_wsgi-expressスクリプトを実行します-
これにより、ポート8000でApache/mod_wsgiが起動します。 次に、ブラウザで次を指定することにより、インストールが機能したことを確認できます-
.wsgiファイルの作成
Apacheの構成
アプリケーションの場所を mod_wsgi に伝える必要があります。
スタンドアロンWSGIコンテナー
WSGIアプリケーションを含み、HTTPを提供するPythonで書かれた多くの一般的なサーバーがあります。
- ユニコーン
- 竜巻
- ゲベント
- ツイストWeb
フラスコ– FastCGI
FastCGIは、nginix、lighttpd、CherokeeなどのWebサーバー上のFlaskアプリケーションの別の展開オプションです。
FastCGIの構成
最初に、 FastCGI サーバーファイルを作成する必要があります。 yourapplication.fcgi と呼びましょう。
Apacheの構成
基本的なApacheデプロイメントの場合、。fcgi *ファイルはアプリケーションURLに表示されます。 *example.com/yourapplication.fcgi/hello/ 。 yourapplication.fcgi がURLに表示されないようにアプリケーションを構成する方法はいくつかあります。