Flaskは2010年に登場し、Pythonウェブフレームワークの長所を集約したマイクロフレームワークです。以下にその主要な特徴を紹介します。
主な特徴
- 内蔵開発サーバーとデバッガー
- Pythonのユニットテスト機能とのシームレスな統合
- Jinja2テンプレートエンジンの使用
- WSGI 1.0規格への完全対応
- Unicodeベースの文字コード(デフォルトでUTF-8をサポート)
環境構築
1. Flaskのインストール
pip install Flask
2. SQLAlchemyのインストール
pip install SQLAlchemy
3. Flask-WTFのインストール
Flask-WTFはHTMLフォーム処理を簡略化するためのライブラリです。
pip install Flask-WTF
Hello Worldサンプル
以下のコードはFlaskを使ったシンプルなHello Worldアプリケーションです。
#!/usr/bin/env python
# coding: utf-8
from flask import Flask
web_app = Flask(__name__)
@web_app.route('/')
def greet():
return 'こんにちは、世界!'
if __name__ == '__main__':
web_app.run()
Flaskの内部動作
1. アプリケーションの初期化
Flaskオブジェクトを作成することで、アプリケーションが設定されます。このとき、`__name__`パラメーターは、テンプレートや静的ファイルの位置を特定するために使用されます。
2. ルーティングの仕組み
`route`デコレーターを使用して、URLパターンを関数にマッピングできます。例えば、`GET`リクエストだけでなく、`POST`などの他のHTTPメソッドも指定可能です。
@web_app.route('/example', methods=['POST'])
def example_handler():
return 'POSTリクエストを受け取りました'
追加機能
1. ルートの逆生成
`url_for`関数を使用すると、関数名からURLを生成することができます。
2. コンテキスト管理
2.1 セッション管理
Flaskでは、`session`オブジェクトを使ってセッションデータを管理します。これはCookieベースの実装であり、複数のリクエスト間でデータを共有します。
from flask import Flask, session
import datetime
app = Flask(__name__)
app.secret_key = '秘密鍵を設定'
@app.route('/set_session')
def set_session():
session['timestamp'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
return session['timestamp']
@app.route('/get_session')
def get_session():
return session.get('timestamp', 'セッションが存在しません')
2.2 アプリケーショングローバルオブジェクト
`g`オブジェクトを使用することで、リクエストごとに共有されるデータを保持できます。
2.3 リクエストコンテキスト
`request`オブジェクトを通じて、クライアントからのデータ(URLパラメーター、フォームデータなど)にアクセスできます。
2.4 コールバックフック
Flaskは、リクエストの前後で共通の処理を実行できるように、以下のデコレーターを提供しています。
- `before_request`: リクエスト前に実行
- `after_request`: リクエスト後に実行
- `teardown_request`: リクエスト終了時に必ず実行(例外発生時も含む)