プログラミング

Flaskで作るWebアプリケーション

Flaskを使用してWebアプリケーションを作成する方法について、完全かつ包括的なガイドを提供します。FlaskはPythonで非常に人気のあるマイクロウェブフレームワークであり、シンプルで軽量な構造でありながら、強力な機能を提供します。以下では、Flaskを使った基本的なWebアプリケーションの作成方法をステップバイステップで説明します。

1. 環境の準備

まず、Flaskを使用するために、Pythonの環境を整えます。FlaskはPythonのパッケージであるため、pipを使用してインストールします。

bash
pip install flask

2. 基本的なFlaskアプリケーションの作成

Flaskをインストールした後、最初のWebアプリケーションを作成してみましょう。以下は、Flaskを使用して簡単なWebアプリケーションを作成するためのコードです。

python
from flask import Flask # Flaskアプリケーションのインスタンスを作成 app = Flask(__name__) # ルート(ホームページ)にアクセスしたときの処理を定義 @app.route('/') def hello_world(): return 'こんにちは、Flask!' # アプリケーションを実行 if __name__ == '__main__': app.run(debug=True)

このコードをapp.pyというファイル名で保存し、以下のコマンドで実行します。

bash
python app.py

ブラウザでhttp://127.0.0.1:5000にアクセスすると、”こんにちは、Flask!”と表示されるはずです。

3. ルーティングと動的なURL

Flaskでは、特定のURLパターンに対して異なるレスポンスを返すことができます。これをルーティングと呼びます。動的URLを使って、URLパラメータを取得する方法を見てみましょう。

python
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'ホームページへようこそ!' @app.route('/hello/') def hello(name): return f'こんにちは、{name}さん!' if __name__ == '__main__': app.run(debug=True)

この例では、/hello/というURLにアクセスすることで、URL内のnameパラメータを取得し、レスポンスに組み込んでいます。例えば、http://127.0.0.1:5000/hello/太郎にアクセスすると、”こんにちは、太郎さん!”と表示されます。

4. HTMLテンプレートの使用

Flaskでは、Jinja2というテンプレートエンジンを使用してHTMLファイルを動的に生成することができます。まず、templatesというディレクトリを作成し、その中にHTMLファイルを配置します。

例えば、次のようなtemplates/hello.htmlというファイルを作成します。

html
html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Flask Webアプリケーションtitle> head> <body> <h1>こんにちは、{{ name }}さん!h1> body> html>

次に、Flaskアプリケーションを次のように変更して、HTMLテンプレートをレンダリングします。

python
from flask import Flask, render_template app = Flask(__name__) @app.route('/hello/') def hello(name): return render_template('hello.html', name=name) if __name__ == '__main__': app.run(debug=True)

これにより、http://127.0.0.1:5000/hello/太郎にアクセスすると、”こんにちは、太郎さん!”というメッセージを含むHTMLページが表示されます。

5. フォームデータの処理

Flaskを使ってフォームを作成し、送信されたデータを処理する方法を説明します。以下のコードは、ユーザーから名前を入力してもらい、その名前を画面に表示するフォームを作成する方法です。

まず、templates/form.htmlを作成します。

html
html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>フォーム送信title> head> <body> <h1>名前を入力してくださいh1> <form method="POST"> <label for="name">名前:label> <input type="text" id="name" name="name" required> <button type="submit">送信button> form> body> html>

次に、Flaskアプリケーションを次のように変更します。

python
from flask import Flask, render_template, request app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def form(): if request.method == 'POST': name = request.form['name'] return f'こんにちは、{name}さん!' return render_template('form.html') if __name__ == '__main__': app.run(debug=True)

これにより、http://127.0.0.1:5000/にアクセスすると、ユーザーが名前を入力できるフォームが表示され、送信後には「こんにちは、〇〇さん!」というメッセージが表示されます。

6. 静的ファイルの使用

Flaskでは、CSS、JavaScript、画像などの静的ファイルも扱うことができます。これらのファイルは、staticというディレクトリに配置します。

例えば、static/styles.cssというCSSファイルを作成し、次のように使用します。

css
/* static/styles.css */ body { font-family: Arial, sans-serif; background-color: #f0f0f0; text-align: center; }

次に、templates/index.htmlを次のように変更してCSSを読み込みます。

html
html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Flask Webアプリケーションtitle> <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}"> head> <body> <h1>Flask Webアプリケーションへようこそ!h1> body> html>

これにより、CSSが適用されたページが表示されます。

7. データベースとの接続

Flaskは、SQLAlchemyを使用してデータベースと簡単に接続できます。以下は、SQLiteを使用した簡単なデータベース接続の例です。

まず、pip install flask-sqlalchemyでSQLAlchemyをインストールします。

次に、以下のコードを作成します。

python
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False) @app.route('/') def home(): users = User.query.all() return '
'
.join([user.name for user in users]) if __name__ == '__main__': db.create_all() # データベースを作成 app.run(debug=True)

このコードでは、Userというモデルを作成し、SQLiteデータベースに保存されたユーザー情報を表示します。

結論

Flaskはシンプルで使いやすいフレームワークですが、拡張性も高いため、実際のWebアプリケーションの開発にも適しています。基本的なFlaskの使い方から始めて、テンプレートエンジン、フォーム処理、静的ファイル、データベースとの接続など、さまざまな機能を学ぶことで、より高度なアプリケーションの開発に挑戦できるようになります。

Back to top button