概要
「Head First Python 第2版」を進めていった中で考えたことの記録です。
Head First Python 第2版 ―頭とからだで覚えるPythonの基本
- 作者: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が良い感じに処理してくれます。