Flaskの最初の一歩を踏んでみる?

2021年4月30日金曜日

Flask Python

t f B! P L

Flaskは、Pythonの軽量WEBフレームワークである。

Flaskのインストール

とりあえず Flaskをインストールしよう!

pip install Flask

Anacondaの人はこちら。

conda install flask

作業フォルダの作成

Flaskアプリを作るための作業フォルダを作ろう。

mkdir flask_sample
cd flask_sample

Hello Flask

次のファイルを作成して、定番の「Hello World」をブラウザに表示してみよう。

「app.py」

from flask import Flask
app = Flask(__name__)

@app.route('/')
    return "Hello World"

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

Flaskの起動

次のコマンドでFlaskアプリを実行する。

python hello.py

起動したら「http://localhost:5000/」にアクセスして、ブラウザに「Hello World」が表示されればOKだ!

テンプレートエンジンのJinja2を使う

Flaskには標準でHTMLテンプレートエンジンである「Jinja2」が付属しています。テンプレートエンジンを使用することで、静的なHTMLに対し部分的に動的な処理を施すことができます。

また、サイトヘッダーやフッターなど、どのページでも共通する部分をレイアウトファイルとして作成しておくことで、共通化を図ることができます。

レイアウトファイルの作成

プロジェクトフォルダの下に「templates」フォルダを作成し、そこに「layout.html」というファイルを作成します。(ファイル名は任意の名前でもOK)

ルート
├─ app.py
└─ templates
       └─ layout.html ←これを作成

「layout.html」

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>{{ title }}</title>
</head>
<body>
{% block content %}
<!-- ここにメインコンテンツを書く -->
{% endblock %}
</body>
</html>

{{ title }}には、個別ページで指定したタイトルが入ります。また、{% block content %}で囲われた部分に個別ページのコンテンツ(HTML)が入ります。

個別ページの作成

お次は、個別ページを作ります。レイアウトファイルで定義した{% block content %}の中身に入るコンテンツを作成します。

ルート
├─ app.py
└─ templates
       ├─ layout.html
       └─ index.html ←これを作成

「index.html」

{% extends "layout.html" %}
{% block content %}
  <h3>Hello Flask</h3>
{% endblock %}

extendsには使用するレイアウトファイルを指定します。
また、{% block content %}内にコンテンツを作成します。

Jinja2についてもっと詳しく

FlaskでUIを伴うWEBアプリを作る場合、Jinja2のテンプレートエンジンに関する知識は必須です。
Jinja2についてもっと詳しく知りたい場合は、次の記事で詳しく紹介しております。

【関連記事】
Jinja2の使い方を紹介。Flask+Jinja2

静的ファイルを扱う

Flaskでは CSS・JavaScirpt・画像ファイルなどの静的リソースは、デフォルトでは「static」フォルダに配置します。

「static」フォルダに、以下の通りCSSとJavaScirptのリソースを配置した場合の、HTMLファイルでの読み込み例は次の通りです。

ルート
├─ app.py
└─ static
       ├─ js
       │     └─ hello.js
       └─ css
              └─ style.css

「HTML」

<link rel="stylesheet"
      href="{{ url_for('static', filename="css/style.css") }}" >
<script type="text/javascript" 
      src="{{ url_for('static', filename="js/hello.js") }}" ></script>
スポンサーリンク

QooQ