Flaskとは?Pythonウェブ開発の基礎 Flaskフレームワーク入門

IT技術解説

Flaskは、必要な機能を追加していく「マイクロフレームワーク」として設計されており、シンプルでありながら非常に強力です。この特性は、ネットワークSEとしてインフラとアプリケーションのインターフェースを構築する際にも役立ちます。Flaskを使うことで、APIサーバーやシンプルなウェブアプリケーションのバックエンドを短期間で開発でき、さらにインフラ面での理解を深めることができます。

この記事では、Flaskフレームワークを使って、ウェブアプリケーションを構築する基本的な流れを解説します。ネットワークSEの観点から、Flaskの導入からルーティング、フォーム処理、データベース接続に至るまで、具体的なコード例と共に、Flaskの基本的な使い方を学んでいきましょう。また、Flaskを使ったウェブ開発におけるネットワーク構成や運用面についても触れていきます。

Flaskとは?

Flaskは、Pythonを用いた軽量なウェブフレームワークで、特にシンプルで柔軟な設計が特徴です。「マイクロフレームワーク」として、最小限の機能でスタートし、必要に応じて追加のライブラリや機能を導入できる点が魅力です。Flaskは、APIサーバーやシンプルなウェブアプリケーションの構築に最適で、ネットワークSEの方にとっても、インフラとアプリケーション間の橋渡しをする上で有用なスキルとなります。[Flaskへようこそ-Flask Documentation]

Flaskの主な特徴

  • 軽量でシンプル:最小限のコードで動作するため、初学者にも扱いやすい。
  • 柔軟性:必要な機能だけを追加することができ、自由度が高い。
  • 拡張性:SQLAlchemyやFlask-Loginなど、豊富な拡張機能を活用できる。

Flaskのインストール方法

Flaskを使用するためには、まずPython環境が必要です。Pythonがインストールされていれば、以下のコマンドでFlaskをインストールできます。

インストール後、基本的な「Hello, World!」アプリケーションを作成して、Flaskの動作を確認します。

・app.py

これを実行すると、ローカルサーバーが立ち上がり、http://127.0.0.1:5000/ で「Hello, World!」が表示されます。

Flaskでウェブアプリケーションを作成する

Flaskでは、URLと関数を結びつける「ルーティング」が重要です。ルーティングは、ユーザーのリクエストがどの関数に送られるかを決定します。例えば、次のコードでは、/(ホームページ)にアクセスした際に「Hello, World!」を返します。

Flaskでは、URLのパターンを指定することもでき、動的なルーティングも簡単に実現できます。例えば、ユーザー名をURLから取得する場合は次のように実行します。

Flaskのビュー関数

Flaskでは、リクエストを受け取ってレスポンスを返す「ビュー関数」を定義します。ビュー関数は、データベースからデータを取得したり、HTMLテンプレートをレンダリングしたりします。

この例では、render_templateを使って、hello.htmlテンプレートをレンダリングし、nameという変数を渡しています。

HTMLテンプレートの利用

Flaskでは、ウェブアプリケーションの動的コンテンツを簡単に生成するために、Jinja2というテンプレートエンジンを使用します。Jinja2を使うことで、Pythonの変数やロジックをHTMLに埋め込み、ユーザーに表示するコンテンツを動的に生成することができます。

ネットワークSEとして、テンプレートエンジンを理解することは、フロントエンドとバックエンドがどのように連携して動作するかを理解する上で非常に重要です。特に、APIレスポンスをHTMLとして返す場合や、動的なデータをウェブページに埋め込む場合に、Jinja2を活用することができます。

Jinja2テンプレートエンジン

Jinja2は、Flaskに組み込まれているテンプレートエンジンで、PythonのコードをHTMLテンプレート内に埋め込むことができます。FlaskでJinja2を使うことで、例えばデータベースから取得したデータをHTMLに埋め込んでユーザーに表示することが可能です。

Jinja2では、変数を埋め込むだけでなく、条件分岐やループ処理を使って、より動的なコンテンツを作成することもできます。例えば、以下のようにテンプレートファイル(hello.html)を作成し、Flaskのビュー関数でそのテンプレートをレンダリングします。

・templates/hello.html

このHTMLテンプレートでは、{{ name }}という部分にFlaskのビュー関数から渡された変数nameが埋め込まれます。次に、Flaskでこのテンプレートをレンダリングしてみましょう

・app.py

このコードでは、URLパラメータとして渡されたnameをテンプレートに渡し、その値をhello.html内で表示します。例えば、http://127.0.0.1:5000/greet/Johnにアクセスすると、「Hello, John!」というメッセージが表示されます。

Jinja2は、単純な変数の埋め込みだけでなく、さらに強力な機能も提供します。例えば、条件分岐やループを使って動的なコンテンツを生成することもできます。

・条件分岐の例

・ループ処理の例

このように、Jinja2ではPythonの構文に似た書き方で、HTML内に動的なコンテンツを埋め込むことができ、柔軟でインタラクティブなウェブアプリケーションを作成するために非常に便利です。

Flaskを利用したバックエンドとフロントエンドの連携がスムーズにできるようになり、データベースから取得した情報を基にユーザーにパーソナライズされたページを提供したり、APIレスポンスをHTMLとして返すことができるようになります。

フォームの処理とバリデーション

ウェブアプリケーションでは、ユーザーからのデータを受け取るためにフォームが使用されます。Flaskでは、フォームデータの処理とバリデーションも簡単に行えます。

フォームの作成

HTMLフォームを作成して、ユーザーからデータを送信できるようにします。

・templates/form.html

このフォームは、ユーザーが入力したデータをPOSTリクエストで送信します。

バリデーションの実装

フォームデータを受け取る際に、バリデーションを行って入力内容が正しいか確認します。例えば、ユーザー名が空でないかをチェックする例です。

このコードでは、POSTリクエストで送信されたusernameをチェックし、空の場合はエラーメッセージを表示します。

データベースとの接続

Flaskは、SQLAlchemyを使ったデータベース操作をサポートしています。ネットワークSEとして、データベースとの連携を理解することは非常に重要です。

まず、SQLAlchemyをインストールします。

次に、Flaskアプリケーション内でデータベースを設定し、モデルを定義します。

このコードでは、SQLiteデータベースにユーザーを追加する機能を実装しています。

※商品PRを含む記事です。当メディアはAmazonアソシエイト、楽天アフィリエイトを始めとした各種アフィリエイトプログラムに参加しています。当サービスの記事で紹介している商品を購入すると、売上の一部が弊社に還元されます。