Flaskでリクエストを処理する方法

概要

Flaskでは、リクエストの処理はルーティング関数内で行います。
ルーティング関数の引数には、リクエストボディやパスパラメータが渡されます。 これらを使用して、リクエストに関連するデータの取得やレスポンスの生成などを行います。

ここでは、以下バージョンを使用した、Flaskでリクエスト処理する方法を説明します。

Flask v2.1.0
Python v3.11.4

また、今回作成するコードは全て、GitHub に掲載しています。

リクエスト情報を取得する方法

リクエストに関する情報を取得するには、リクエストオブジェクトを使用します。 Flaskのルーティング関数で使用され、リクエストヘッダー、パラメータ、ボディなどのデータにアクセスするために利用されます。

以下のサンプルコードは、Flaskでリクエストオブジェクトを理解するための例です。POSTリクエストを受け取り、リクエストヘッダー、ボディデータにアクセスして、それらの値を含むレスポンスを返します。

app.py

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/items/", methods=["POST"])
def create_item():
    item = request.json
    user_agent = request.headers.get('User-Agent')
    item.update({"user_agent": user_agent})
    return jsonify(item)

解説

  • 必要なライブラリとモジュールのインポート:
from flask import Flask, request, jsonify

Flaskは、APIを作成するための主要なクラスです。requestは現在のHTTPリクエストデータにアクセスするためのオブジェクト、jsonifyはPythonのデータ構造をJSONに変換するための関数です。

  • Flaskアプリケーションのインスタンス化:
app = Flask(__name__)

appは、このFlaskアプリケーションの新しいインスタンスを作成します。これはアプリケーションの主要なエントリーポイントで、ルーティング定義などの設定を行います。

  • ルーティングとエンドポイントの定義:

以下の例では、新しいアイテムを作成するエンドポイントを定義しています。

@app.route("/items/", methods=["POST"])
def create_item():
    item = request.json
    user_agent = request.headers.get('User-Agent')
    item.update({"user_agent": user_agent})
    return jsonify(item)

このエンドポイントはFlaskのデコレータ機能を使用して定義され、HTTPメソッド(POST)とURLパス(/items/)を指定します。

エンドポイントの関数内では、まずリクエストボディからJSONデータを取得し、その後リクエストヘッダーからユーザーエージェントの情報を取得します。これらの情報を元にレスポンスを生成し、JSONとして返します。 Flaskアプリケーションを起動するには、以下のコマンドを実行します:

export FLASK_APP=app.py
flask run

テスト

curl -X POST -H "Content-Type: application/json" -d '{"name": "item1", "price": 10.0}' http://localhost:5000/items/

まとめ

この記事では、PythonのフレームワークであるFlaskを使用したリクエスト処理の方法について紹介しました。Flaskを用いてルーティング関数を設定し、リクエストボディやパスパラメータを活用してリクエストデータの取得やレスポンスの生成を行う方法を解説しました。

具体的なコード例として、POSTリクエストを受け取り、リクエストヘッダーとボディからデータを取得し、それらの情報を含むレスポンスを生成する簡単なFlaskアプリケーションを示しました。このアプリケーションでは、リクエストオブジェクトを使用してリクエスト情報にアクセスし、その情報を元にレスポンスを生成しています。

Flaskはそのシンプルさと拡張性から広く使われており、今回紹介したリクエスト処理の方法はWebアプリケーションやAPIの開発において非常に有用です。今後もFlaskを使った開発を進める上で、本記事や掲載したGitHubのコードを参考にしていただければと思います。