概要
「Head First Python 第2版」を進めていった中で考えたことの記録です。
- 作者:Paul Barry
- 発売日: 2018/03/24
- メディア: 単行本(ソフトカバー)
Flaskにおいてリダイレクトを設定する際のPythonコード
from flask import Flask, render_template, request, redirect from vsearch import search4letters app = Flask(__name__) @app.route('/') def hello() -> '302': return redirect('/entry') @app.route('/entry') def entry_page() -> str: return render_template( 'entry.html', the_title='Web版のsearch4lettersにようこそ!' ) app.run()
上記コードをpyコマンドで実行した上で、http://127.0.0.1:5000にアクセスすると、実行されているWebアプリケーションは以下のようなログを返します。
127.0.0.1 - - [23/Feb/2021 09:53:34] "GET / HTTP/1.1" 302 - 127.0.0.1 - - [23/Feb/2021 09:53:35] "GET /entry HTTP/1.1" 200 -
HTTPステータスコードの300番台はリダイレクトを表します。この例では、Webアプリケーションは以下のような動作をしているわけです。
/にGETメソッドでアクセスされると、/entryへのリダイレクトを返す- 1.の動作により、
/entryへのGETリクエストが送出される /entryへのGETリクエストが正常に処理される- Webブラウザに
entry.htmlの内容が返される
redirect関数のインポート
Flaskにおいてリダイレクトを行わせるには、flaskライブラリに含まれるredirect関数を使用します。当然ながら、redirect関数のインポートという操作が必要になります。以下は、redirectを含むflaskライブラリの関数・クラス群をインポートするimport文の例です。
from flask import Flask, render_template, request, redirect
Flaskにおいて複数のWebページのロケーションに同一関数を割り付ける際のPythonコード
Flaskでは、複数のWebページのロケーションに同一の関数を割り付けることも可能です。下記コードは、「entry_page関数を、/と/entryという2つのリソースに割り付ける」というPythonコードの例です。
from flask import Flask, render_template, request from vsearch import search4letters app = Flask(__name__) @app.route('/') @app.route('/entry') def entry_page() -> str: return render_template( 'entry.html', the_title='Web版のsearch4lettersにようこそ!' ) app.run()
上記コードをpyコマンドで実行した上で、http://127.0.0.1:5000にアクセスすると、実行されているWebアプリケーションは以下のようなログを返します。
127.0.0.1 - - [23/Feb/2021 09:55:47] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [23/Feb/2021 10:11:17] "GET /entry HTTP/1.1" 200 -
この例では、Webアプリケーションは以下のような動作をしています。
/ではなく/entryに直接アクセスした場合も同様の動作となります。
「entry_page関数を、/と/entryという2つのリソースに割り付ける」という記述は、Pythonコード側における以下の記述が対応しています。
@app.route('/') @app.route('/entry') def entry_page() -> str:
単純に@app.routeデコレータをentry_page関数の定義の前に2つ書いているだけですね。このように記述しておけば、あとはFlaskが良い感じに処理してくれます。