今回はルーティングについてだ。
ルーティングは以前話がありましたね。
クライアントのリクエスト内容とサーバでの処理を紐づけること..でしたっけ。
左様。テック君にしてはよく覚えているな。
以前はルーティングの意味だけ紹介したが、今回はFlaskでルーティングの実装までやってみる。
えっと、とりあえずルーティングのおさらいからしておきたいです。
しょうがない。ルーティングとは何ぞ?から確認しよう。
ルーティングとは
webアプリケーションにおけるルーティングとは、クライアントのリクエスト内容とサーバでの処理を紐づけることを指します。
具体的には、URLとアプリケーション(サーバ側)の処理を紐づけることです。クライアントは実行したいURLに対してリクエストを投げ、サーバではそのURLに対応する処理が実行され、クライアントに何等かの結果が返されます。
webアプリケーションでよく用いられるリクエストの方法として、HTTPメソッドがあります。
HTTPなどは別の機会に説明するとして、先ほども言ったが「クライアントのリクエスト内容とサーバでの処理を紐づけること」。これをざっくりルーティングと思うといい。
なんとなくわかったので、早くFlaskで実装しましょう!
君が求めるから概念の説明をしているというのに、自分勝手もいいところだな。。
Flaskでルーティングを実装する
実際にFlaskでルーティングを実装し、URLと実行する処理を紐づけてみます。以下に、いくつかの例を盛り込んだサンプルコードを示します。
from flask import Flask
from flask import request
print(__name__)
app = Flask(__name__)
@app.route("/")
def main_page():
return "<p>This is the main page</p>"
@app.route("/hello")
def hello():
return "<p>Hello World!</p>"
@app.route("/yourJob/<job>")
def show_user_profile(job):
return "Your Job: " + str(job)
@app.route("/http" , methods=['GET', 'POST'])
def http():
if request.method == 'POST':
return "<p>POST</p>"
elif request.method == 'GET':
return "<p>GET</p>"
else:
return "<p>Anything else</p>"
if __name__ == "__main__":
app.run()
シンプルなルーティング構文
ルーティングは@app.route()で制御する。
appというのはWebアプリケーション本体だと以前説明したな。
Flaskではappに対していろいろな処理を行っていくんですよね。
ルーティングについても@app.route()の形でappに対して処理を行っている。@はデコレータと呼ばれるものだが、今回は説明しない。
ルーティングとは具体的にはURLとアプリケーション(サーバ側)の処理を紐づけることだ。以下の場合、appに対し”/”というURLを紐づけ、対応する処理を定義している。
@app.route("/")
def main_page():
return "<p>This is the main page</p>"
URLは”/”だけですか?
“/”はいろいろと省略された結果だ。例えばローカルサーバで起動した場合、”/”は”http://localhost:5000/”と同義になる。
次に別のルーティングを定義してみる。
@app.route("/hello")
def hello():
return "<p>Hello World!</p>"
URLが”/hello”では、Hello World!を表示するんですね。
その通り。このように、ルーティングではURLとWebアプリケーションでの処理を紐づけるんだ。
URLで引数を渡す場合
ルーティングする際、もっと多くの情報を必要とする場合がある。
多くの情報?氏名年齢生年月日とかカードの番号とか??
THE個人情報ばかりだな。あながち間違いでもない場合もあるが。
例えば職業は人によって異なるが、その人の職業を表示する場合は変数として扱う必要がある。
そして、その値はどこかから受け取る必要がある。
受け取る方法の1つとして、ルーティング時に変数として渡すことができるのだ。
@app.route("/yourJob/<job>")
def show_user_profile(job):
return "Your Job: " + str(job)
なんか便利ですね
この例の場合、URLの<job>の部分が変数となる。jobは変数名。実際には変数jobの値がURLに入ることになる。
http://127.0.0.1:5000/yourJob/sales
このURLでは、’sales’という値が変数jobとして処理に渡される。
HTTPメソッド
@app.route(“/http” , methods=[‘GET’, ‘POST’])のように指定することで、HTTPメソッド(この場合はGETとPOST)を許可することができます。
@app.route("/http" , methods=['GET', 'POST'])
def http():
if request.method == 'POST':
return "<p>POST</p>"
elif request.method == 'GET':
return "<p>GET</p>"
else:
return "<p>Anything else</p>"
参考だが、ルーティング時にHTTPメソッドを指定することもできる。
HTTPメソッドについては別の機会に説明しよう。
そろそろ疲れてきたので、ちょうどよかったです。
テック君にはもう少し集中力を持ってもらいたいものだが、まあいい。
まとめ
ルーティングとは何だったか説明してくれテック君。
ルーティングとはURLとアプリケーション(サーバ側)の処理を紐づけることでしたよね。
そうだ、少しはやるではないか。
また、紐づける時に変数を渡したり、HTTPメソッドを指定できるんだったな。
いろいろとオプション機能があるんですね。
オプション的な機能は必要になったときに使えるようになれば良い。今回はここまでにしよう。
ありがとうございました~~♪