コンテンツにスキップ

Flask

出典: フリー教科書『ウィキブックス(Wikibooks)』

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開発まで幅広く活用できます。適切な拡張機能を利用することで、大規模なプロジェクトにも対応可能です。