Flask
Flaskの概要
[編集]Flaskはマイクロフレームワークと呼ばれる軽量なWebフレームワークであり、Djangoのようなフルスタックフレームワークとは異なり、必要な機能を選んで追加する形で構築できます。Flaskの特徴として、以下の点が挙げられます。
- 軽量でシンプルな設計
- Jinja2テンプレートエンジンの利用
- WSGIアプリケーションとして動作(Werkzeugを利用)
- 拡張機能を自由に選択可能
環境構築
[編集]Flaskを利用するには、Pythonの環境が必要です。以下の手順でセットアップを行います。
Pythonのインストール
[編集]Python 3.8以上を推奨します。FreeBSDでは以下のコマンドでインストール可能です。
doas pkg install python
仮想環境の作成とFlaskのインストール
[編集]プロジェクトごとに仮想環境を作成し、依存関係を管理するのが望ましいです。
# python -m venv venv # . venv/bin/activate (venv) # python -m pip install flask
最初のFlaskアプリケーション
[編集]Flaskアプリケーションは、シンプルなPythonスクリプトで構築できます。
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello, Flask!" if __name__ == '__main__': app.run(debug=True)
このスクリプトをapp.py
として保存し、実行すると、開発用サーバーが起動し、http://127.0.0.1:5000/
にアクセスすると「Hello, Flask!」と表示されます。
ルーティングとリクエスト処理
[編集]Flaskでは、@app.route()
デコレータを使ってURLと関数を紐付けます。
@app.route('/hello/<name>') def hello(name): return f"Hello, {name}!"
URLのパスパラメータを活用することで、動的なページを作成できます。
HTTPメソッドの指定
[編集]デフォルトではGETリクエストのみ受け付けますが、methods
引数を指定することで、POSTなど他のメソッドも利用できます。
@app.route('/submit', methods=['POST']) def submit(): return "Form submitted!"
テンプレートエンジン Jinja2
[編集]Jinja2を利用すると、HTMLテンプレートを動的に生成できます。テンプレートファイルはtemplates/
ディレクトリに配置し、render_template()
関数でレンダリングします。
templates/index.html
[編集]<!DOCTYPE html> <html> <head> <title>Flask App</title> </head> <body> <h1>Hello, {{ name }}!</h1> </body> </html>
app.py
[編集]from flask import Flask, render_template app = Flask(__name__) @app.route('/hello/<name>') def hello(name): return render_template('index.html', name=name)
テンプレート内でテンプレート:...
を使うことで、変数を埋め込むことができます。
フォームとリクエスト処理
[編集]Flaskでは、フォームデータを受け取るためにrequest
オブジェクトを使用します。
フォームのHTML
[編集]<form action="/submit" method="post"> <input type="text" name="username"> <input type="submit" value="Submit"> </form>
Python側の処理
[編集]from flask import request @app.route('/submit', methods=['POST']) def submit(): username = request.form['username'] return f"Received: {username}"
データベースとの連携
[編集]FlaskはSQLAlchemyを利用することで、データベースとのやり取りを簡単に行えます。
(venv) # python -m pip install flask-sqlalchemy
app.py
[編集]from flask_sqlalchemy import SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False)
データベースの作成:
(venv) # python >>> from app import db >>> db.create_all()
APIの構築
[編集]FlaskはRESTful APIの構築にも適しています。
from flask import jsonify @app.route('/api/user/<int:user_id>') def get_user(user_id): user = User.query.get(user_id) return jsonify(id=user.id, name=user.name)
まとめ
[編集]Flaskはシンプルながら強力なWebフレームワークであり、小規模なWebアプリケーションからAPI開発まで幅広く活用できます。適切な拡張機能を利用することで、大規模なプロジェクトにも対応可能です。