CH 01Flask とは / インストール
Flask は Python で書ける軽量な Web アプリケーションフレームワーク。「URL に来たリクエストを関数で受け取り、HTML を返す」というシンプルな仕組みで、最初の一歩に向いている。
インストール
ターミナルで以下を実行するだけで導入できる。
pip install flask
今回扱う 3 つの要素
app.py
ルーティングと表示用データを書く Python 側のエントリーポイント。
templates/
HTML テンプレートを置くフォルダ。index.html をここに配置する。
static/
CSS や画像などの静的ファイル置き場。style.css はここから読み込む。
Point
Flask の世界では「Python が値を作り、HTML がそれを表示する」という役割分担が基本。データの中身は app.py、見た目は templates/ に切り分けて考える。
CH 02基本構成と最小コード
まずは「/ にアクセスしたら index.html を返す」だけの最小構成を動かす。
app.py(最小)
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
@app.route('/')
def index():
return render_template("index.html")
if __name__ == '__main__':
app.run()
templates/index.html(最小)
<!DOCTYPE html>
<html lang="jp">
<head>
<title>flaskテスト</title>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, user-scalable=yes">
<meta charset="UTF-8">
<link rel="stylesheet" href="../static/css/style.css">
</head>
<body>
<h1>テスト</h1>
<div>
てすとです。<br>
</div>
</body>
</html>
How to run
python app.py を実行すると http://127.0.0.1:5000/ でローカルサーバーが立ち上がる。ブラウザでそのアドレスを開くと、index.html がそのまま表示される。
Qiita 原文(Flask 基本)を読む
CH 03テンプレート文法(変数・for・if)
Flask のテンプレートは Jinja2。HTML の中に {{ ... }} や {% ... %} を埋め込むことで、Python 側の値や制御構造をそのまま反映できる。
① 変数を HTML に渡す
app.py 側で render_template の引数として渡し、HTML 側では {{ 変数名 }} で受け取る。
# app.py
a = "こんにちは"
return render_template("index.html", txt=a)
<!-- index.html -->
<body>
<h1>テスト</h1>
<div>
てすとです。<br>
{{ txt }}<br>
</div>
</body>
② for 文でくり返す
<h1>テスト</h1>
<div>
{% for i in range(10) %}
{{ txt }} --- {{ i }}<br>
{% endfor %}
</div>
③ if 文で条件分岐
<h1>テスト</h1>
<div>
{% for i in range(10) %}
{% if i%2==0 %}
{{ txt }} --偶数-- {{ i }}<br>
{% else %}
{{ txt }} --奇数-- {{ i }}<br>
{% endif %}
{% endfor %}
</div>
記法の使い分け
| 記法 | 用途 | 例 |
| {{ ... }} | 値を 表示 する | {{ txt }} |
| {% ... %} | 制御構造(for / if)の開始・終了 | {% if x %}{% endif %} |
| {# ... #} | テンプレート内コメント(出力されない) | {# memo #} |
練習問題
2 つの変数 txt1 / txt2 を index.html に渡し、0〜9 の for 文で 偶数のときは txt1、奇数のときは txt2 を表示する。
CH 04Python の復習
Step 2 では、テンプレートに渡すデータを Python 側で組み立てる。先にリスト操作と文字列置換を整理しておく。
リストの基本
- 1 次元リストは
list[i] で値を取り出す
- 多次元リストは
list[i][j] のように添字を重ねる
- for 文と組み合わせて、行ごとの処理がそのまま書ける
文字列の置換
「ああああああああ」の あ を い に置き換える、というシンプルな例。
s = "ああああああああ"
s = s.replace("あ", "い")
print(s) # いいいいいいいい
Point
replace はチェーン(連続適用)できる。s.replace("(", "").replace(")", "") のようにつないで、まとめて記号を落とすことが多い。
CH 05CSV を読み込んで一覧表示
最終形は「CSV から読み込んだデータをリスト化し、テンプレート側で条件によって文字列 or リンクとして表示する」流れ。
app.py(CSV → リスト → テンプレートへ)
from flask import Flask, render_template, request, session, redirect, flash, url_for
from csv import reader
app = Flask(__name__)
@app.route('/')
def index():
with open('./mmcsv.csv', 'r', encoding="utf-8") as csv_file:
csv_reader = reader(csv_file)
list_mm = list(csv_reader)
for data in list_mm:
data[3] = "https://www.google.com/maps?q=" + data[3] \
.replace("(", "") \
.replace(")", "") \
.replace(" ", "")
print(list_mm)
return render_template("index.html", mmlist=list_mm)
if __name__ == '__main__':
app.run()
index.html(最終形)
<h1>テスト</h1>
<div>
{% for data in mmlist %}
{% if data[1]=="場所" %}
{{ data[1] }} <br>
{% else %}
<a href={{ data[3] }} target="_blank">{{ data[1] }}</a><br>
{% endif %}
{% endfor %}
</div>
処理の流れ
① 読み込み
open + csv.reader で CSV を 2 次元リストに変換。
② 整形
住所列の括弧と空白を replace で除去し、Google マップ URL を組み立てる。
③ 受け渡し
整形済みリストを mmlist としてテンプレートへ。
④ 表示分岐
ヘッダ行("場所")はそのまま、データ行はリンクとして描画。
学んだこと
Flask の本質は「Python で作ったデータを、テンプレート側の表示ロジックでどう見せるか」を切り分けて書けること。CSV → リスト → Jinja2 まで通ると、外部データを使った Web ページの最小サイクルが一通り体験できる。
Qiita 原文(Flask step2)を読む