ルーティングは、Webアプリケーション開発における最も基本的な概念のひとつです。クライアントからのリクエスト(URL)と、サーバ側で実行する処理を紐づける仕組みです。
この記事では、Flaskにおけるルーティングの仕組みと、具体的な実装方法を解説します。
ルーティングとは
Webアプリケーションにおけるルーティングとは、クライアント(ブラウザなど)がアクセスしたURLに対して、サーバ側でどの処理を実行するかを定義することです。
具体的には、以下のような流れで動作します。
- クライアントが特定のURLにリクエストを送信する
- サーバがそのURLに対応する処理を実行する
- 処理結果をクライアントにレスポンスとして返す
ルーティングが適切に定義されていることで、ユーザーは目的のページや機能にアクセスできるようになります。
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ファイルを読み込んで画面を表示する方法を解説します。