ITや趣味など気軽に投稿しています。

【Python】FlaskでWebアプリケーションを作る③ -ルーティング

ルーティングは、Webアプリケーション開発における最も基本的な概念のひとつです。クライアントからのリクエスト(URL)と、サーバ側で実行する処理を紐づける仕組みです。

この記事では、Flaskにおけるルーティングの仕組みと、具体的な実装方法を解説します。

ルーティングとは

Webアプリケーションにおけるルーティングとは、クライアント(ブラウザなど)がアクセスしたURLに対して、サーバ側でどの処理を実行するかを定義することです。

具体的には、以下のような流れで動作します。

  1. クライアントが特定のURLにリクエストを送信する
  2. サーバがそのURLに対応する処理を実行する
  3. 処理結果をクライアントにレスポンスとして返す

ルーティングが適切に定義されていることで、ユーザーは目的のページや機能にアクセスできるようになります。

Flaskでルーティングを実装する

サンプルコード全体

以下に、複数のルーティングパターンを盛り込んだサンプルコードを示します。

from flask import Flask
from flask import request

app = Flask(**name**)

@app.route("/")
def main_page():
    return "<p>This is the main page</p>"

@app.route("/hello")
def hello():
    return "<p>Hello World!</p>"

@app.route("/yourJob/<job>")
def show_user_profile(job):
    return "Your Job: " + str(job)

@app.route("/http" , methods=['GET', 'POST'])
def http():
    if request.method == 'POST':
        return "<p>POST</p>"
    elif request.method == 'GET':
        return "<p>GET</p>"
    else:
        return "<p>Anything else</p>"

if **name** == "**main**":
    app.run()

以降、各ルーティングのパターンについて詳しく解説します。

基本的なルーティング

Flaskでは@app.route()デコレータを使ってルーティングを定義します。

@app.route("/")
def main_page():
    return "<p>This is the main page</p>"

この例では、ルートURL(/)にアクセスがあった場合にmain_page()関数が実行されます。ローカルサーバで起動した場合、/http://127.0.0.1:5000/に対応します。

同様に、別のパスに対してルーティングを追加できます。

@app.route("/hello")
def hello():
    return "<p>Hello World!</p>"

http://127.0.0.1:5000/helloにアクセスすると、「Hello World!」と表示されます。このように、@app.route()を複数定義することで、さまざまなURLに対して異なる処理を割り当てることができます。

URLパラメータを受け取る

URLの一部を変数として受け取ることも可能です。<変数名>の形式でURL内に変数を定義します。

@app.route("/yourJob/<job>")
def show_user_profile(job):
    return "Your Job: " + str(job)

たとえば、http://127.0.0.1:5000/yourJob/salesにアクセスすると、URLのsalesの部分が変数jobに格納され、「Your Job: sales」と表示されます。

型を指定することも可能です。

@app.route("/user/<int:user_id>")
def show_user(user_id):
    return f"User ID: {user_id}"
コンバータ説明
stringデフォルト。スラッシュを含まない文字列を受け取る
int整数値を受け取る
float浮動小数点数を受け取る
pathスラッシュを含む文字列を受け取る

HTTPメソッドの指定

methods引数を使って、許可するHTTPメソッドを指定できます。

@app.route("/http", methods=['GET', 'POST'])
def http():
    if request.method == 'POST':
        return "<p>POST</p>"
    elif request.method == 'GET':
        return "<p>GET</p>"
    else:
        return "<p>Anything else</p>"

HTTPメソッドを指定することで、同じURLに対してもリクエストの種類に応じた処理を実装できます。methodsを指定しない場合、デフォルトではGETのみが許可されます。

メソッド用途
GETデータの取得(ページの表示など)
POSTデータの送信(フォームの送信など)
PUTデータの更新
DELETEデータの削除

ポイント: HTTPメソッドの使い分けはWebアプリケーションの設計において重要です。RESTfulなAPI設計を意識する場合は、各メソッドの意味に沿って適切に使い分けましょう。

まとめ

この記事では、Flaskのルーティングについて解説しました。

  • ルーティングはURLとサーバ側の処理を紐づける仕組み
  • @app.route()デコレータでルーティングを定義する
  • <変数名>でURLパラメータを受け取ることができる
  • methods引数でHTTPメソッドを指定できる(デフォルトはGETのみ)

次回は、FlaskからHTMLファイルを読み込んで画面を表示する方法を解説します。