Webブラウザのリクエストに応じて呼び出す処理を切り替えるルーティング機能を使ってみましょう。プログラムによる動的なWebページではユーザーがアクセスしたURLに応じて呼び出す処理を切り替えることで、それぞれのページに応じた異なる情報を出力しています。
目次
ルーティングとは
ルーティングはWebアプリケーションの基本となる技術の1つです。
WebブラウザからWebサーバーにリクエストが送られた時、Webサーバーはそのリクエストに応じてHTMLやCSS、画像やJavaScriptなどのファイルを返します。
それらをWebブラウザが組み合わせて1つのWebページとして表示しています。
HTMLによる静的なWebページではURLごとに予め決まった内容を返しますが、PHPやPythonといったプログラムによる動的なWebページではリクエストに応じて異なる処理を呼び出し、その結果としてHTMLページを作成して返します。
別のルートを追加
実際にルーティングによって呼び出す処理を切り替えてみましょう。
前の記事ではトップページ(ルートディレクトリのURL)にアクセスすると Hello, World! と表示するアプリケーションを作成しましたが、今回はそれ加えて、/about にアクセスすると別の処理を返すよう設定してみましょう。
# Flackクラスをインポート from flask import Flask # Flaskクラスのインスタンスを作成 app = Flask(__name__) @app.route("/") # ルートディレクトリのURLをトリガーに def index(): # 関数を定義 return "Hello, World" @app.route("/about") # /aboutのURLをトリガーに def about(): # 関数を定義 return "About Us"
flaskコマンドを使ってアプリケーションを実行し、ブラウザで確認してみましょう。
まずはトップページ(http://127.0.0.1:5000/)にアクセスしてみます。
前回と同じようにHello, World! と表示されます。
ではURLの末尾に /about と追加して http://127.0.0.1:5000/about にアクセスしてみましょう。
今度は画面に About Us と表示されました。
このようにWebアプリケーションではルートに応じて呼び出す処理を設定することで、ページに表示する内容を動的に切り替えています。
GET以外のHTTPメソッドに対応する処理
WebブラウザとWebサーバー間の通信には主にGETメソッドとPOSTメソッドというHTTPメソッドを使います。
Flaskでは特に記載がない限りGETメソッドのみに応答しますが、POSTなど別のHTTPメソッドに対応したい場合はroute()デコレータのmethod引数を使用することで対応するHTTPメソッドを指定できます。
from flask import Flask, request # requestを追加 app = Flask(__name__) @app.route("/about", methods=["GET", "POST"]) # GETメソッドとPOSTメソッドに対応 def index(): return "Hello, World"
対応するHTTPメソッドを指定したい場合はこのようにimportにrequestを追加し、route()デコレータのmethod引数に対応したいHTTPメソッドを指定します。