環境構築
% mkdir myproject
% cd myproject
% python3 -m venv venv
環境を有効化
% . venv/bin/activate
Flaskのインストール
% conda install Flask
起動
- 以下を
main.py
でディレクトリに保存
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
- 環境変数
main
をエクスポート
% export FLASK_APP=main
- 起動
flask run
- ポート番号指定
-p 5000
- ファイルリロード
--reload
- ポート番号指定
% flask run -p 5000 --reload
ルーティング指定
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
@app.route("/page1")
def page1():
return "<p>page1</p>"
URL末尾のスラッシュ
@app.route()
で指定するURL末尾のスラッシュ- つけると /foo でアクセスしても /foo/ にリダイレクトされて、スラッシュ有りでも無しでもアクセスできる
- つけない場合はスラッシュ無しでしかアクセスできない
- SEO の観点からは、付けない方がベター
@app.route("/foo/") # /foo でも /foo/ でもアクセスできる
@app.route("/baa") # /baa はアクセス可。/baa/ はアクセス不可
静的ファイル
- css, js, 画像などは
static
に配置する
<link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet">
<script src="{{ url_for('static', filename='js/script.js') }}"></script>
<img src="{{ url_for('static', filename='img/flask-logo.png') }}" alt="">
テンプレートファイル
- Flask にはテンプレートエンジン Jinja2 が含まれている
- テンプレートは下記の様に
templates
フォルダに設置する
- テンプレートは下記の様に
|_ file main.py
|_ templates
|_ file main.html
- テンプレートを変換するには
render_template()
メソッドを使用できる テンプレート名
と、キーワード引数
としてテンプレートエンジンに渡したい変数を指定する
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route("/")
def main(title='My Webpage'):
return render_template('main.html', title=title)
- テンプレートでは Jinja2 テンプレートの機能を全て使うことができる
Template Designer Documentation — Jinja Documentation (3.1.x)
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ title }}}}</title>
</head>
<body>
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
<h1>My Webpage</h1>
{{ a_variable }}
{# a comment #}
</body>
</html>