Flaskを使ってWebアプリケーションを開発する際、最も重要な機能のひとつが「ルーティング」です。ルーティングは、URLに基づいて特定の処理を実行する方法を提供します。このガイドでは、Flaskのルーティングとビュー関数について、わかりやすく説明し、実際に簡単なページ遷移を作成しています。
ルーティングとは?
Flaskにおける「ルーティング」とは、特定のURLにアクセスした際に、どのビュー関数(処理)を実行するかを決定する仕組みです。例えば、http://localhost:5000/
にアクセスしたとき、index()
という関数を実行する、というように設定します。
ルーティングの基本的な流れ
- ユーザーがブラウザで特定のURLにアクセスします。
- FlaskはそのURLに関連するビュー関数を探して実行します。
- ビュー関数は処理を行い、その結果をブラウザに返します。
ビュー関数とは?
ビュー関数は、ルーティングによって呼び出されるPythonの関数で、Webアプリケーションが返すレスポンスを定義します。例えば、あるページにアクセスしたときに表示されるHTMLコードを返したり、データを返したりします。
例えば、index()
というビュー関数は、/
というURLにアクセスしたときに表示するコンテンツを定義します。
Flaskでルーティングとビュー関数を設定する方法
Flaskでは、ルートを設定するために@app.route()
というデコレーターを使います。これにより、特定のURLにアクセスされたときに実行されるビュー関数を指定できます。
基本的なルーティングとビュー関数
まず、Flaskアプリケーションを作成して、基本的なルーティングとビュー関数を設定しましょう。
from flask import Flask
app = Flask(__name__)
# ルートURL ('/') にアクセスされたときに実行されるビュー関数
@app.route('/')
def home():
return 'Hello, Welcome to the Home Page!'
# 追加のURL ('/about') にアクセスされたときに実行されるビュー関数
@app.route('/about')
def about():
return 'This is the About Page.'
if __name__ == '__main__':
app.run(debug=True)
コードの説明
@app.route('/')
:このデコレーターは、/
というURLにアクセスされた際に実行される関数home()
を定義しています。home()
関数は、'Hello, Welcome to the Home Page!'
という文字列をブラウザに返します。- 同様に、
@app.route('/about')
は、/about
というURLにアクセスされたときに実行される関数about()
を定義しています。
結果
Homeの結果です。ここでは、「http://127.0.0.1:5000」にアクセスした時の表示です。

次に「http://127.0.0.1:5000/about」にアクセスした結果です。

URLパラメータを使ったルーティング
Flaskでは、URLの一部を変数として扱い、その値をビュー関数に渡すこともできます。これを「URLパラメータ」と言います。
動的なルーティング
from flask import Flask
app = Flask(__name__)
# URLパラメータを受け取る
@app.route('/hello/<name>')
def hello(name):
return f'Hello, {name}!'
if __name__ == '__main__':
app.run(debug=True)
コードの説明
@app.route('/hello/<name>')
:<name>
はURLの一部として受け取る変数です。例えば、/hello/test
にアクセスすると、name
には'test'
が渡され、hello()
関数内で使用されます。hello(name)
関数は、Hello, test!
などのメッセージをブラウザに返します。
結果
http://localhost:5000/hello/test
→Hello,test!

HTTPメソッドを使ったルーティング
Flaskでは、特定のHTTPメソッド(GET、POST、PUT、DELETEなど)に応じて異なる処理を実行することもできます。デフォルトでは、FlaskはGET
メソッドに対応するルートを定義しますが、POST
メソッドにも対応できます。
POSTメソッドを使ったフォーム送信
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def greet():
if request.method == 'POST':
name = request.form.get('name')
return f'Hello, {name}!'
return render_template('greet_form.html')
if __name__ == '__main__':
app.run(debug=True)
コードの説明
このコードでは、/ ルート
で GET
メソッドも POST
メソッドも処理できるようにしています。POST
メソッドでフォームが送信されると、名前が表示されます。GET
メソッドの場合は、HTMLフォームを表示します。
この場合、HTMLフォームから送信された名前を受け取り、挨拶を返す処理が行われます。
HTMLの作成
次に、templates/greet_form.html
というHTMLファイルを作成します。Flaskはデフォルトで templates
フォルダ内のHTMLファイルを探します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Greet Form</title>
</head>
<body>
<h1>Enter Your Name</h1>
<form method="POST">
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
<button type="submit">Greet Me!</button>
</form>
</body>
</html>
結果
名前を入力して送信ボタンを押すと、POST
メソッドが送信され、Flaskがその名前を受け取って、Hello, {name}!
と表示されます。

「test」を入力した結果です。

まとめ
Flaskのルーティングとビュー関数は、Webアプリケーションの基本となる部分です。以下のポイントを押さえておくと、Flaskを使ったWeb開発がスムーズに進みます
- ルーティング:
@app.route()
デコレーターを使って、特定のURLにアクセスされたときに実行するビュー関数を定義します。 - ビュー関数: ルートURLにアクセスされたときに実行されるPythonの関数です。HTMLやテキストをブラウザに返す役割を持っています。
- 動的ルーティング: URLの一部を変数として使用し、動的にデータを表示することができます。
- HTTPメソッド: フォームデータを処理したり、特定のアクションを実行する際に
POST
やGET
などのHTTPメソッドを指定して処理を分けることができます。
これらの基本を理解することで、FlaskでのWebアプリケーション開発が簡単に始められます。次のステップでは、フォームの作成やデータベースとの連携など、さらに進んだ機能を学びましょう!