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


前回の記事を参考に

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とは


https://codor.co.jp/django/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」の違いについて

https://techacademy.jp/magazine/35043


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

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

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

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

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

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

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

 

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

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