Webフレームワークの基本アーキテクチャ
Webフレームワークの根幹は、本質的に「Socketサーバー」です。WSGI(Web Server Gateway Interface)または独自のSocket通信を起点とし、URLルーターがリクエストを特定の関数やクラスへ振り分けます。その後、テンプレートエンジンがロジックから渡されたデータとHTMLを合成し、最終的なレスポンスをブラウザへ返却するという流れが基本です。
Bottle:極小のマイクロフレームワーク
Bottleは単一の.pyファイルで構成され、Python標準ライブラリ以外への依存がない非常に軽量なフレームワークです。WSGI互換のサーバーを別途指定する必要があります。
基本的な実装例
from bottle import Bottle, run
app = Bottle()
@app.route('/hello/<name>')
def greet(name):
return f"Hello, {name}!"
if __name__ == "__main__":
run(app, host='localhost', port=8080)
ルーティングとリクエスト処理
- 静的ルート: 特定のパスと関数を直接紐付けます。
- 動的ルート: URLに含まれる変数を取得可能です(例:
/user/<id:int>)。 - メソッド指定:
@app.postや@app.getデコレータを用いて、HTTPメソッド単位で処理を分岐できます。
Flask:拡張性に優れたマイクロフレームワーク
Flaskは、Werkzeug(WSGIツールキット)とJinja2(テンプレートエンジン)を核とした、非常に人気のある軽量フレームワークです。「マイクロ」である理由は、コア機能が必要最小限であり、データベース操作やフォームバリデーションなどを必要に応じてプラグインで追加する設計思想に基づいているためです。
Flaskの構造
from flask import Flask, request
server = Flask(__name__)
@server.route('/submit', methods=['POST'])
def process_data():
username = request.form.get('username')
return f"User {username} received."
if __name__ == "__main__":
server.run(port=5000)
主な機能コンポーネント
- Requestオブジェクト: クライアントからのヘッダー、フォームデータ、ファイルアップロード情報などを一元管理します。
- Response管理:
make_response関数を用いることで、ステータスコードの変更やCookieの操作、ヘッダーのカスタマイズが容易に行えます。 - セッション管理: 署名付きCookieを利用したセッション機能を備えており、
secret_keyを設定することでクライアント側で保存されるデータに改ざん防止を施せます。
テンプレートエンジンの活用
FlaskはJinja2を標準採用しており、テンプレート内でのPythonコードの実行や、継承({% extends "base.html" %})が可能です。また、render_template関数の引数にカスタム関数を渡すことで、HTMLレンダリング時に動的なロジックを注入できます。