Flaskとは
・PythonのFWの一つ
書き方
from flask import Flask
app = Flask(__name__)
@app.route("/python")
def hello_python():
return "Hello, Python!"
解説
・最初の2行はFlaskを利用するために毎回書きます。
・2行目でFlaskのオブジェクトを作っています。app は Flaskのオブジェクトです。
・Flask() の引数に__name__が指定されています。モジュール名やパッケージ名を引数に代入するためです。
ルーティング
・ルーティングはデコレーターとして書きます。
・@app.route("/") と指定されていたら、http://ドメイン名/ というURLでサイトにアクセスされた場合は hello_world 関数が実行されます。
Webページのアドレス のホスト名(ドメイン) + コンテキストパス
例)https://pyq.jp/pricing/
・pyq.jp がホスト名(ドメイン)
・pricing がコンテキストパス(ContextPath)→ルーティングにする
テンプレートエンジンの使い方
実例
フロント
<h1>{{hello}}, Flask</h1>
バックエンド
@app.route("/")
def index():
greeting = "こんにちは"
return render_template('hello.html',hello=greeting)
解説
※テンプレートエンジンはlaravelでいうところのviewのbladeファイルと同じ役割
※render_template 関数の第2引数にキーワード引数を渡すことで、任意のデータを変数にセットできます。
テンプレートエンジンでのfor文での書き方
・変数は{{ }}(波かっこ)で囲む
・for文などは{% for 繰り返し処理の記述 %} 処理 {% endfor %}
①リスト
{% for a_day in week %}
<h3>{{ a_day }}</h3>
{% endfor %}
バックエンド
return render_template("index.html", week=week)
解説
week=week という表現は、HTMLテンプレート内で使用する変数 week に、Pythonの week という変数の値を渡すことを意味します。
ララベルでも同じような渡し方をしていた。変数を連想配列で渡すやり方
②辞書
return render_template("index.html", duties=duties)
バックエンドはいつもと同じで、ただ辞書を変数に入れて返しただけ
フロント
{% for a_day, duty in duties.items() %}
<h3>{{ a_day}}</h3>
{{duty}}
{% endfor %}
.items()を使って同じようにかくだけ。キーだけ大きくするために<h3>で囲むなど、そこは自由に使える
クエリストリングとは
・クエリストリングとは、URLのコンテキストパスに続けて” ? ” を書き、続けて key=value 形式でデータを書きます。
Google で Python と入力し検索結果が表示されている画面の URL を見てください。
https://www.google.co.jp/search?q=Python のようになっています。
? 以降の ?q=Python の部分がクエリストリングです。
キーと値を = で結合し指定します。
例題
index.htmlに以下の記述があります。このリンク( <a> タグがリンクになります)をクリックするとWebブラウザーは1番を選んだ場合 /result?fruit_no=1 という情報をサーバーに送信します。
<ul>
<li><a href="/result?fruit_no=1">1番</a></li>
<li><a href="/result?fruit_no=2">2番</a></li>
<li><a href="/result?fruit_no=3">3番</a></li>
</ul>
バックエンド
@app.route("/result")
def result():
fruits = {'1': 'もも', '2': 'りんご', '3': 'みかん'}
# 値を受け取る
fruit_no = request.args.get("fruit_no", ' ')
return render_template("result.html", fruit=fruits[fruit_no])
解説
・ /result が呼ばれたら、 result() 関数を実行するという意味です。
・request.args.get ではこの関数が呼び出されたときのリクエストから値を取り出しています。
request.args.get("fruit_no", ' ')の解説
.get()
・辞書から値を取得するためのメソッドで、指定されたキーに対応する値を取得します。
・もし指定されたキーが存在しない場合、デフォルト値を返します。
・request.args.get("fruit_no", ' ') は、request.args 辞書から "fruit_no" キーに対応する値を取得し、もしキーが存在しない場合は空白を返します。
.args
・クエリ文字列は、URLに ? 以降に付与されるキーと値のペアであり、例えば https://example.com/search?q=python&page=1 の場合、q=python&page=1 がクエリ文字列です。
※.argsのみを使って取得した場合、これらの全てのパラメータを含む辞書が返されます。つまり、request.args は以下のような辞書を返します
python
Copy code
{
"q": "python",
"page": "1",
"sort": "asc"
}
重要
・.args を使用すると、URLのクエリ文字列内に存在するすべてのキーと値のペアを取得することができます。
・特定のキーの値を取得する場合は、.args.get() メソッドを使ってそのキーを指定する必要があります。
・特定のキーと値を取得したい場合はrequest.args.get()で取得できる。第一引数がキー、第二引数が値となる
テンプレートエンジンの返し方
render_template(HTMLのファイルpath, 渡すリストや辞書の変数)という風にかく
定型分