Python マイクロフレームワークである Flask の入門 — SitePoint

ニュース

ホームページホームページ / ニュース / Python マイクロフレームワークである Flask の入門 — SitePoint

Jan 28, 2024

Python マイクロフレームワークである Flask の入門 — SitePoint

Questo articolo presenta Flask, un popolare microframework per Python.

この記事では、Django という巨人の代替となる人気のある Python のマイクロフレームワークである Flask を紹介します。

Flask は軽量かつ柔軟になるように設計されており、開発者は Web アプリを迅速かつ簡単に作成できます。 この記事では、Flask とは何か、その主な機能、シンプルな API の利点、サードパーティの拡張機能をサポートする柔軟性、最も一般的な Flask 拡張機能、いつ使用するのが良いのか、いつ使用しないのかについて説明します。フラスコ。

Flask は、Web アプリケーションの開発に使用される Python で書かれたマイクロ Web フレームワークです。 これは、物事をシンプルかつ軽量に保つというシンプルな哲学に基づいて構築されており、不必要な複雑さを排除して Web アプリを構築するために必要な最も重要なツールのみを開発者に提供します。

これは、リクエストと応答の処理に必要な Web サーバー機能を提供する Werkzeug WSGI ツールキットと、Flask に HTML テンプレートを処理する機能を提供する Jinja2 テンプレート エンジンを基盤として構築されており、開発者は動的な Web アプリケーションを作成できます。

以下に、Flask を優れたフレームワークとして機能させる主要な機能をいくつか示します。

全体として、Flask は、Web アプリケーションを構築するための強力で柔軟でありながらシンプルなフレームワークを提供します。 これは、初心者と経験豊富な Web 開発者の両方にとって良い選択であり、Python Web 開発エコシステムで最も人気のある Web フレームワークの 1 つです。

次に、開発で Flask を使用する利点のいくつかをさらに詳しく見てみましょう。

シンプルさ 。 Flask の設計哲学はシンプルさを重視しており、どのレベルの開発者にとっても理解しやすく、使いやすくなっています。 これは、開発者が Web アプリケーションの構築を開始するためにいくつかの概念と API を学ぶだけで済むため、学習曲線が非常に最小限であることも意味します。

柔軟性 。 Web フレームワークのコア機能のみを提供するという Flask のミクロな性質により、開発者は Flask 拡張機能やサードパーティ ライブラリを使用して要件に合わせてカスタマイズおよび拡張することができます。

ドキュメンテーション 。 Flask のドキュメントは非常に包括的で、基本的なトピックから高度なトピックまで幅広く網羅されているため、開発者はフレームワークの使用方法を非常に簡単に学ぶことができます。

互換性 。 Flask は幅広い Python バージョンと互換性があるため、既存の Python コードベースで簡単に使用できます。 また、複数の Web サーバーもサポートされているため、さまざまなホスティング プラットフォームに簡単に導入できます。

素早い開発 。 Flask のシンプルさと柔軟性により、アプリケーションのセットアップに必要な定型文が削減され、開発者がすぐに開始できるようになります。

Web では、Flask はさまざまな興味深い方法で使用されています。 いくつかの注目すべき例は次のとおりです。

Flask はシンプルで使いやすいため、幅広い Web プロジェクトに最適です。

Flask は優れたフレームワークであり、多くの利点と優れた機能を備えていますが、これらの機能が不利に働く状況もあります。 他のタイプのフレームワークに適したプロジェクトをいくつか見てみましょう。

組み込み機能が必要なプロジェクト 。 Flask はマイクロフレームワークであるため、Web アプリケーションの作成に必要なコア部分のみを提供します。 たとえば、プロジェクトで管理インターフェイス、認証、ORM が必要な場合は、Django の方が良い選択肢です。

厳しいセキュリティ要件があるプロジェクト 。 Flask は柔軟なフレームワークであるため、アプリにある程度のセキュリティを実装するにはサードパーティの拡張機能に依存する必要があります。 これは確かに機能しますが、Tornado や Twisted など、より安全なアプローチを採用する、より実績のあるフレームワークに依存する方が良いでしょう。

何らかのコーディング標準を強制するプロジェクト 。 Flask の柔軟性により、Flask でアプリケーションを開発する場合、開発者は適切と思われる方法でアプリケーションを作成できます。 ただし、Django のようなフレームワークでは、開発者が特定の規則に従うことが保証されるため、開発者はあるプロジェクトから別のプロジェクトに簡単に移動できます。

次に、開発環境のセットアップからインストール、そして最後に最小限のアプリケーションの起動まで、Flask を使い始める方法を見てみましょう。

Python は開発マシンにインストールする必要があります。 その手順は次のとおりです (すでにインストールされている場合もあります)。

仮想環境は、グローバルな Python インストールに影響を与えることなく、特定のプロジェクトのパッケージをインストールできる分離された Python 環境です。 (仮想環境が役立つ理由については、ここでさらに詳しく説明します。) Python で仮想環境を作成するためのさまざまなパッケージ (virtualenv、venv、Conda など) があります。

この記事では、virtualenv を使用します。 次のコマンドでインストールできます。

virtualenv がインストールされたら、Flask アプリケーションが常駐するディレクトリを作成できます。 ディレクトリには、競合が発生するため、Flask 以外の任意の名前を付けることができます。 これを flask_intro と呼びます。

次に、そのディレクトリに移動して、使用を開始できるようにします。

そのディレクトリで、次のコマンドを使用して仮想環境を作成しましょう。

上記のコマンドは仮想環境を作成し、それを myenv と呼びます。 Flask をインストールできるようにアクティブ化しましょう。 仮想環境をアクティブにするにはLinuxまたはマックOS、次のコマンドを使用します。

の上ウィンドウズ、次のコマンドを使用します。

仮想環境がアクティブ化されると、以下の出力のように、シェル プロンプトに仮想環境の名前が表示されます。

アクティブ化された仮想環境内で、次のコマンドを使用して Flask をインストールします。

Flask のインストールが完了したら、最小限のアプリケーションを作成してみましょう。 Flask アプリケーションを保持するモジュールを作成します。 簡単にするために、これを hello.py と呼ぶことにします。 の上LinuxまたはマックOS次のコマンドを使用して、flask_intro ディレクトリにファイルを作成できます。

上記のコマンドにより、hello.py という名前のファイルが作成されます。 開発環境を使用してファイルを作成することもできます。 ファイルが作成されたら、以下のコードをその中に入れて保存します。

上記のコードでは、flask モジュールから Flask クラスをインポートし、app と呼ぶ Flask のインスタンスを作成し、__name__ 変数を渡します。

次に、ルート デコレーター @app.route("\") があります。これは、誰かがアプリケーションの実行後にそのルート ルートにアクセスすると、hello_world() 関数がトリガーされることを意味します。

アプリケーションを実行するにはさまざまな方法があるので、そのいくつかを見てみましょう。 最初の方法は、flask コマンドにいくつかの引数を指定することです: --app、次に Flask アプリケーションを保持するモジュールの名前を指定して、実行します。 以下を参照してください:

上記の例を使用してサンプル アプリケーションを実行します。

これにより、アプリケーションがデフォルトのポート 5000 で実行されるため、アプリケーションは http://localhost:5000/ または http://127.0.0.1:5000/ で利用できるようになります。 アプリケーションを別のポートで使用できるようにしたい場合は、-p または --port オプションを使用してポートを指定できます。 例えば:

これにより、サーバーがポート 8080 で実行されます。アプリケーションを実行できるもう 1 つの方法は、flask run コマンドを使用することです。 ただし、これを行うには、Flask インスタンスを保持するモジュールの名前を Flask に伝える必要があり、これを FLASK_APP 環境変数を設定することで行います。 したがって、この例では、Flask アプリケーションは hello.py という名前のファイルに含まれています。 したがって、次のように設定できます。

FLASK_APP 環境変数を設定したので、次のように開発サーバーを実行できます。

このコードにより、Web アプリケーションが実行できるようになりました。 これは、Flask の核となる哲学を示しています。つまり、物事を進めるのに多くの定型コードは必要ありません。 ただし、上で設定したアプリケーションは、文字列「Hello World!」をレンダリングするだけなので、あまり機能的でも有用でもありません。 私たちのウェブページで。 もっと便利なことをするには、テンプレートを利用します。 次にそれらを処理する方法を見ていきます。

フラスコテンプレートは、データベースからのデータやユーザー入力など、さまざまな要素に基づいてさまざまなコンテンツを表示できる動的な Web ページを作成する方法です。 Flask のテンプレートは、HTML と と呼ばれる特別なプレースホルダーの組み合わせです。テンプレート変数実行時に実際の値に置き換えられます。

テンプレートはテンプレート ディレクトリに保存されます。 したがって、テンプレートを使用するには、flask から render_template() メソッドをインポートする必要があります。 render_template() メソッドは、テンプレート名と、テンプレートに渡す必要があるオプションのデータを受け取ります。

テンプレートを使用して Web ページをレンダリングする関数の例を見てみましょう。

上の例では、 @app.route() デコレータによってルート URL (「/」) にバインドされているビュー関数、index() があります。 この関数には、タイトルとメッセージという 2 つの変数があります。 最後に、テンプレートのindex.htmlをタイトル変数とメッセージ変数とともにrender_template()に渡します。

上記のコードが機能するには、index.html テンプレートがテンプレート ディレクトリに存在する必要があります。 したがって、テンプレートは次のようになります。

Index.html ファイルでは、プレースホルダー {{title}} と {{ message }} が、render_template() メソッドでテンプレートに渡される値に置き換えられます。

テンプレートには、if ステートメントや for ループなどのより複雑なロジックを含めることもでき、より動的なページを生成できます。

そのため、Flask のテンプレートは、ユーザーが生成する情報が豊富な動的な Web ページを作成するための非常に強力なオプションを開発者に提供します。

ほとんどの Web アプリケーションには複数の URL があるため、どの関数がどの URL を処理するかを知る方法が必要です。 Flask では、このマッピングは次のように呼ばれます。ルーティング — URL をビュー関数にバインドまたはマッピングするプロセス。 URL をビュー関数にバインドすると、アプリケーションは GET、POST、PUT、DELETE などのさまざまなタイプのリクエストを処理できるようになります。 また、アプリケーションが異なるクライアントからの複数のリクエストを処理できるようになります。

Flask でルートを設定するには、route() デコレータを使用します。 デコレーターは URL をビュー関数にバインドします。そのため、ユーザーがアプリケーション上に存在する URL にアクセスすると、Flask は関連するビュー関数をトリガーしてリクエストを処理します。

例を見てみましょう:

上の例では、about URL (/about) を定義します。 アプリケーションが about URL のリクエストを受信すると、Flask は about() 関数を呼び出し、「これは about ページです」という文字列を返します。

これまでのところ、これらの例は異なるページを返しますが、すべて GET HTTP リクエストを使用しているだけです。 特定のリクエストを処理できるようにするために、route() デコレーターへのオプションの引数として HTTP メソッドを指定できます。

PUT リクエストの例を見てみましょう。

この例では、user_id を指定してユーザーの詳細を更新するための PUT リクエストを処理するルートを定義します。 ルート内で を使用して、ユーザー ID が整数である必要があることを示します。

update_user() 関数では、request.get_json() メソッドを使用してリクエスト本文からユーザー データを取得します。 データベース内のユーザーを更新するなど、ユーザー データに対して何らかの処理を行った後、成功または失敗を示す応答を HTTP ステータス コード (この場合は成功を示す 200) とともに返します。

全体として、ルーティングにより、Flask はさまざまな種類のリクエストを処理できるようになり、ユーザーがアクセスする URL に応じて、アプリケーションがデータを異なる方法で処理および動作できるようになります。

ユーザーにデータを表示するだけでなく、Flask テンプレートはユーザーからの入力を受け取り、さらに処理したり保存したりすることもできます。 そのために、Flask は HTML フォームの処理とユーザー入力の処理のための組み込みサポートを提供します。 Flask フォームは WTForms ライブラリに基づいており、フォーム データを処理して検証を実行するための柔軟かつ強力な方法を提供します。 ただし、ライブラリは標準の Flask インストールの一部ではないため、次のコマンドを使用してインストールする必要があります。

WTForms をインストールしたら、Flask でフォームを使用するには、flask_wtf.FlaskForm から継承するフォーム クラスを定義する必要があります。 このクラスには、フォーム上に表示されるフィールドと、それらのフィールドに適用する必要がある検証ルールが含まれます。

ログインフォームの例を見てみましょう。

上の例では、電子メールとパスワードの 2 つのフィールドと送信ボタンを含むログイン フォームを定義します。 各フィールドの検証ルールを指定するために使用される validators 引数もあります。 たとえば、この場合、電子メール フィールドには有効な電子メール アドレスが含まれ、パスワード フィールドには 6 文字以上のパスワードが含まれる必要があります。

フォーム クラスを定義したら、ログイン ビュー関数でそれを使用してフォームをレンダリングし、ユーザーが送信したフォーム データを処理できます。 view 関数の例を見てみましょう。

上の例では、2 つの HTTP メソッド (GET と POST) を受け入れるログイン ビューがあるため、ユーザーがブラウザから URL にアクセスすると、render_template メソッドを使用して LoginForm が HTML フォームとしてレンダリングされ、ユーザーがフォームを送信すると、LoginForm が HTML フォームとしてレンダリングされます。 validate_on_submit メソッドを使用してフォームが有効かどうかを確認します。 フォームが有効な場合、メールアドレスとパスワードにアクセスします。

login.html フォームは次のようになります。

上記のテンプレートは、電子メール フィールドとパスワード フィールド、そのラベル、およびテキスト「ログイン」を含む送信ボタンをレンダリングします。 form.csrf_token フィールドは、クロスサイト リクエスト フォージェリ (CSRF) 攻撃を防ぐために含まれています。 {% for %} ループは、発生する可能性のある検証エラーを表示するために使用されます。

Flask フォームを使用することで、ユーザー入力を処理する強力な方法が得られ、ユーザーが入力したデータを検証できるようになります。

これまで見てきたように、Flask は Web アプリケーションの作成に必要な最も重要な部分のみを含むマイクロフレームワークです。 ただし、Flask がそのまま提供していない機能を追加する必要がある場合は、インストールにパッケージを追加する必要があります。 Flask 拡張機能は、この追加機能を提供する方法です。 必要なパッケージをインストールするだけです。 Flask コミュニティによって作成された拡張機能が多数あります。

最も人気のあるもののいくつかを次に示します。

さまざまな機能を処理するために Flask コミュニティによって作成された何百もの拡張機能があります。 拡張機能の使用は通常は簡単です。 まず、pip を使用して必要な拡張機能をインストールする必要があります。

Flask-SQLAlchemy の使用例を見てみましょう。 まず、それをインストールする必要があります。

次に、それを構成する必要があります。 例えば:

上の例では、ユーザー名と電子メール フィールドを持つ User モデルがあります。 また、SQLALCHEMY_DATABASE_URI も構成し、example.db にある SQLite データベースを使用していることを示します。 このセットを使用すると、db オブジェクトにアクセスできるようになり、データベースと対話できるようになります。 たとえば、次のように新しいユーザーを作成してデータベースに追加できます。

Flask 拡張機能を使用すると、アプリケーションはコアの Flask 実装で通常持つよりも多くの機能を備えることができます。

この記事では、Python 用の軽量で柔軟な Web フレームワークである Flask を紹介しました。 シンプルさ、柔軟性、使いやすさなど、Web 開発に Flask を使用する利点について説明しました。 開発環境のセットアップ、ルートの作成、テンプレートの使用、フォームの処理、Flask-SQLAlchemy などの拡張機能の使用方法についても説明しました。

要約すると、Flask は、小規模な個人プロジェクトから大規模な商用アプリケーションまで、あらゆる規模の Web アプリケーションを構築するのに最適な選択肢です。 習得も使用も簡単ですが、多くの拡張機能を通じて高度な機能も提供します。

Flask についてさらに詳しく知りたい場合は、以下の追加リソースを参照してください。

Django と Flask とその最良の使用例について詳しく知りたい場合は、「Django と Flask を使用した Python Web 開発」を参照してください。

Kabaki はフルスタック ソフトウェア エンジニアであり、革新的なデジタル エクスペリエンスの作成に情熱を注ぐテクニカル ライターです。 コーディング以外のときは、開発者のスキルを磨くのに役立つ技術記事を書いて、他の人と知識を共有することを楽しんでいます。

この記事では、Django という巨人の代替となる人気のある Python のマイクロフレームワークである Flask を紹介します。 シンプルさ 柔軟性 ドキュメントの互換性 素早い開発 PgAdmin Twilio Pinterest プロトタイピング RESTful API の作成 E コマース アプリ 金融 AI 組み込み機能を必要とするプロジェクト 厳格なセキュリティ要件を持つプロジェクト 一部のコーディング標準を強制するプロジェクト Linux macOS Windows Linux macOS Flask テンプレート テンプレート変数 ルーティング Flask-SQLAlchemy Flask-ログイン Flask-Mail