はじめに
現代のウェブアプリケーションは、ユーザーに役立つ意味のある URL を使用しています。ページがユーザーが覚えて直接アクセスできる意味のある URL を使用している場合、ユーザーはそのページが好きになり、再度訪問する可能性が高くなります。この実験では、Flask で動的 URL を実装し、関数に複数のルールを追加する方法に焦点を当てます。
ルートデコレータ
このステップでは、route() デコレータを使用して、複数の URL に複数のビュー関数をバインドします。
route_decorator.pyファイルを開き、Flaskクラスをインポートしてインスタンスを作成します。
from flask import Flask
app = Flask(__name__)
- 次に、
route()デコレータを使用して 2 つのルート/と/helloを作成し、対応するビュー関数をバインドし、それぞれ Index Page と Hello, World を返すようにします。
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
- スクリプトの
mainエントリポイントを作成して、Flask アプリケーションをポート 5000 で起動し、debugモードを有効にします。
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
- アプリケーションを実行するには、まずターミナルで以下のコマンドを使用して Flask アプリケーションを起動します。
python3 route_decorator.py
次に、インターフェイス上部にある「Web 5000」タブを開き、ページを更新すると、Index Page のメッセージが表示されます。
ルート /hello の場合、上の URL バーに直接接尾辞 hello を追加することができます。

すると、ページには Hello, World のメッセージが表示されます。
変数付きルール
このステップでは、URL に変数セクションを追加します。<variable_name> でセクションをマークすることで行います。任意で、<converter:variable_name> のようにコンバータを使用して引数の型を指定することもできます。
variable_rules.pyファイルを開き、まずFlaskクラスとescapeをインポートし、次にFlaskクラスのインスタンスを作成します。
from flask import Flask
from markupsafe import escape
app = Flask(__name__)
route()デコレータでは、<variable_name>と<converter:variable_name>のパターンを追加して、変数セクション付きの動的 URL を作成します。ビュー関数はフォーマット済みの文字列を返すようにします。
@app.route('/user/<username>')
def show_user_profile(username):
## show the user profile for that user
return f'User {escape(username)}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
## show the post with the given id, the id is an integer
return f'Post {post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
## show the subpath after /path/
return f'Subpath {escape(subpath)}'
- 以下は一般的なコンバータの種類の一覧です:
| 種類 | 役割 |
|---|---|
string |
(既定)スラッシュなしの任意のテキストを受け付けます |
int |
正の整数を受け付けます |
float |
正の浮動小数点数を受け付けます |
path |
string と同じですが、スラッシュも受け付けます |
uuid |
UUID 文字列受け付けます |
- スクリプトの
mainエントリポイントを作成して、Flask アプリケーションをポート 5001 で起動し、debugモードを有効にします。
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5001, debug=True)
- アプリケーションを実行するには、まず新しいターミナルで以下のコマンドを使用して Flask アプリケーションを起動します。
python3 variable_rules.py
次に、インターフェイス上部にある「Web 5001」タブを開き、上の URL バーに直接接尾辞 user/Alice を追加します。

すると、ページには User Alice のメッセージが表示されます。
- 接尾辞
post/1とpath/some/pathに対しても同じ操作を繰り返すことができます。接尾辞post/1の場合、Post 1 のメッセージが表示されます。接尾辞path/some/pathの場合、Subpath some/path のメッセージが表示されます。
リダイレクト動作
このステップでは、末尾のスラッシュの使用方法に違いがある 2 つのルールを学びます。
redirection_behavior.pyファイルを開き、Flaskクラスをインポートしてインスタンスを作成します。
from flask import Flask
app = Flask(__name__)
route()デコレータを使用して、projectsと呼ばれるビュー関数を持つ/projects/と呼ばれるルートを作成します。
@app.route('/projects/')
def projects():
return 'The project page'
projects エンドポイントの標準的な URL には末尾のスラッシュがあります。これは、ファイルシステムのフォルダに似ています。末尾のスラッシュなし (/projects) で URL にアクセスすると、Flask は末尾のスラッシュ (/projects/) 付きの標準的な URL にリダイレクトします。
aboutと呼ばれるビュー関数を持つ/aboutと呼ばれる別のルートを作成します。
@app.route('/about')
def about():
return 'The about page'
about エンドポイントの標準的な URL には末尾のスラッシュがありません。これは、ファイルのパス名に似ています。末尾のスラッシュ (/about/) 付きで URL にアクセスすると、404 Not Found エラーが発生します。これにより、これらのリソースの URL を一意に保つことができ、検索エンジンが同じページを 2 回インデックスに登録するのを防ぐことができます。
- スクリプトの
mainエントリポイントを作成して、Flask アプリケーションをポート 5002 で起動し、debugモードを有効にします。
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5002, debug=True)
- アプリケーションを実行するには、まず新しいターミナルで以下のコマンドを使用して Flask アプリケーションを起動します。
python3 redirection_behavior.py
次に、インターフェイス上部にある「Web 5002」タブを開き、上の URL バーに直接接尾辞 projects を追加します。

すると、ページには The project page のメッセージが表示され、/projects/ のルートにリダイレクトされます。
projects の代わりに、別の接尾辞 about/ を追加します:

Not Found のメッセージが表示され、404 エラーが表示されます。接尾辞を about に変更すると、正しいメッセージ The about page が表示されます。
URL の構築
このステップでは、特定の関数への URL を生成するために url_for() 関数を使用します。この関数は、最初の引数として 関数名 を受け取り、任意の数のキーワード引数 を受け取ります。それぞれの引数は、URL ルールの可変部分に対応します。不明な可変部分は、URL の末尾にクエリパラメータとして追加されます。
url_building.pyファイルを開き、まずFlaskクラスとurl_forをインポートします。また、Flaskクラスのインスタンスを作成することを忘れないでください。
from flask import Flask, url_for
app = Flask(__name__)
route()デコレータを使用して 3 つのルートを作成し、対応するビュー関数を定義します。
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/<username>')
def profile(username):
return f'{username}\'s profile'
test_request_context()メソッドを使用してurl_for()を試します。これにより、Flask は Python シェルを使用している間でも、リクエストを処理しているかのように振る舞うようになります。
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
url_for('index')は、ビュー関数indexの URL を生成し、/となります。url_for('login')は、ビュー関数loginの URL を生成し、/loginとなります。url_for('login', next='/')は、ビュー関数loginの URL を生成し、追加のクエリパラメータnextを含み、/login?next=/となります。url_for('profile', username='John Doe')は、ユーザー名変数がJohn Doeに設定されたビュー関数profileの URL を生成し、/user/John%20Doeとなります。
- 新しいターミナルで
url_building.pyファイルを直接実行します:
python3 url_building.py
出力結果は以下のようになるはずです:
/
/login
/login?next=/
/user/John%20Doe
まとめ
この実験では、意味のある URL を作成するためのさまざまな方法を学びました。これは、Web アプリケーションを設計する際に非常に重要です。Flask のルーティング機能を巧みに使うことで、ユーザー体験を向上させる、整理された直感的な URL を作成できます。



