LoginSignup
2
4

More than 1 year has passed since last update.

Flask についてまとめ2 ルーティング

Last updated at Posted at 2022-04-30

前回の記事を参考に

index.htmlファイルを修正して遊びます。
拡張子はHTMLファイルですので、「.html」になります。
この際、index.htmlを保存するディレクトリはflask_sample.pyと同じ階層であることに注意してください。

<!DOCTYPE html>
<html lang="ja">
<head>
    <title>初めてのFlaskアプリケーション</title>
</head>
<body>
<h1>Flask<h1>

<h1>解析ソフト</h1>
<h2>電気</h2>
<p>写真はある</p>

<h2>マーカー</h2>
<p>電気のマーカーが必要</p>

<h2>輝度</h2>
<p>電気の輝度が必要</p>

</body>
</html>

localhost:8000にアクセス

表示されればOKです!!!

localhostとは

ネットワークに接続しているIPアドレスがグローバルIPアドレス、ネットワークに接続していないIPアドレスがプライベースIPアドレスです

localhost(127.0.0.1)はプライベートIPアドレスに属します

ブラウザからlocalhostにアクセスすることがどういったことなのか

localhostにアクセスするということは、自分のパソコンにインストールされたブラウザから
自分のパソコンにインストールされたウェブサーバーにアクセスしているということです

localhostにアクセス☛自分のパソコンのウェブサーバーにアクセスするということ

ルーティングとは

適切なネットワークへデータを 転送する処理を、ルーティング(経路制御)と言いますが

今回の
ルーティングとは、URLとFlaskの処理を対応づけることで、URLと関数を紐付けることが出来ます

詳しく説明すると 

リクエスト先のURL(Uniform Resource Locator)とは、Webサイトやファイルなどのインターネット上での場所・情報

実際に処理する関数

を紐づける作業のことを指します

Flaskでは、
関数の先頭にデコーダー(暗号化されたデータを復号する)と呼ばれる関数@app.route()を追加することで
ルート(経路) を追加できます

flask_sample.pyの全体像は次のようになります

import os
from flask import Flask, url_for

app = Flask(__name__)

# ルーティング
@app.route("/hello")
def hello_world():
    return "Hello world"

@app.route("/")
def index():
    return url_for("show_user_profile", username="ai_academy")

@app.route("/user/<username>")
def show_user_profile(username):
    return "UserName: " + str(username)

@app.route("/post/<int:post_id>")
def show_post(post_id):
    return "Post" + str(post_id)


if __name__ == "__main__":
    app.run(port=8000, debug=True)

ループバックアドレス

127.0.0.1はループバックアドレスの一つであり、
同時に127.0.0.1に対応する仮想的なネットワーク・インターフェースを表します

何もrouting設定しなかった場合

何もrouting設定しなかった場合、show_user_profile()という16行目で定義した関数が走ります。
引数では、username=”ai_academy”が渡されます 表示は以下で確認できます

 http://127.0.0.1:8000/

16行目で定義した関数は以下となります

@app.route("/")
def index():
    return url_for("show_user_profile", username="ai_academy")

引数 username="ai_academy" の値が 表示されるのを確認できました

引数 username="ai_like_taichi" の値に変えたら表示も変わることが確認できます

@app.route("/")
def index():
    return url_for("show_user_profile", username="ai_like_taichi")

routing でusernameを返す場合

ここでURLの中にある、AIの部分を変えてみて 挙動を確認することができます

@app.route("/user/<username>")
def show_user_profile(username):
    return "UserName: " + str(username)

http://127.0.0.1:8000/user/AI
☛ UserName: AI と表示されます

http://127.0.0.1:8000/user/AI_check
☛ UserName: AI_check と表示されます

routing でusernameを返す場合

 http://127.0.0.1:8000/hello

ブラウザで次のURLにアクセスすると"Hello world"が出力されます

@app.route("/hello")
def hello_world():
    return "Hello world"

型を指定したURL参照

 http://127.0.0.1:8000/post/11111
☛Post11111と表示されます

@app.route("/post/<int:post_id>")
def show_post(post_id):
    return "Post" + str(post_id)

HTTPリクエストの通信形式「POST」と「GET」の違いについて

HTTPリクエストの通信形式「POST」と「GET」の違いについて以下に示します

GET

「GET」は、URL末尾にリクエストパラメータと呼ばれる識別子が追加される形で送信されます

そのため、送信時のURLからどのような内容が送られているのかが目視で確認できます

断片的な情報を送る場合には適しているといえるでしょう

POST

「POST」は、データ内に含まれた形で送信されます

そのため送信時のURLには表示されず、ユーザーからは目視で確認できない仕組みです

文字数の制限が「GET」よりも緩いので、機密性のある長文を送る場合に適しています

以上の違いから、重要な情報や機密性のある長文を送る際には、「GET」ではなく「POST」を利用するのが一般的です

しかしながら、「POST」であっても標準的に暗号化されているデータの形式にはならず、開発者向けのツールを使用すると内容は確認できるため、実際の運用時にはセキュリティ対策が別途必要といえるでしょう

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4