Open5
Flask first step memo
Welcome to Flask — Flask Documentation (2.2.x) - https://flask.palletsprojects.com/en/2.2.x/
日本語もあるけどUpdateされていない部分が多い
私のローカル環境
$ cat /etc/os-release
NAME="Linux Mint"
VERSION="20.3 (Una)"
ID=linuxmint
ID_LIKE=ubuntu
PRETTY_NAME="Linux Mint 20.3"
VERSION_ID="20.3"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=una
UBUNTU_CODENAME=focal
flask install
Installation — Flask Documentation (2.2.x) -
仮想環境
python -m venv .venv
source .venv/bin/activate
pip install -U pip
touch requirements.txt
requirements.txt に記述
Flask
インストール
pip install -r requirements.txt
quick start
touch hello.py
# hello.py
from flask import Flask
# WSGIアプリケーションインスタンス作成
app = Flask(__name__)
# routing と ハンドラ関数
@app.route("/")
def hello_world():
return "<H1>Hello World</H1>"
- サーバを立ち上げ。
-
--app
オプションでFlaskにアプリケーションの場所を教える。 -
--debug
で開発環境として立ち上げる。ホットリロードが有効になる。
$ flask --app hello --debug run
* Serving Flask app 'hello'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
- パスパラメータ
-
escape
メソッドで囲む。これで必ず文字列として処理され、<script>alert("bad")</script>
などもスクリプトではなく文字列扱いになり、インジェクション攻撃から守ることができる。
from flask import Flask
from markupsafe import escape
app = Flask(__name__)
@app.route("/<name>")
def hello(name):
return f"Hello, {escape(name)}!"
@app.route("/id/<int:userid>")
def helloid(userid):
return f"Hello, {escape(userid)}!!!!!!"
型は以下の4つ
-
string
(default) slash以外の文字列 -
int
正の整数 -
float
正の浮動小数 -
path
slashe付きの文字列 -
uuid
UUID 文字列