はじまる

適当な事を適当に書く

いまさらながら Flask で簡易的なAPIをつくる

そういうことになったのでやる。Python初心者です。

~/W/flask ❯❯❯ python3 --version
Python 3.7.3

とりあえず手元のPythonは3.7.3だった。

~/W/flask ❯❯❯pip3 install flask

でインストール

~/W/flask ❯❯❯ pip3 list | grep Flask
Flask        2.0.2

はいった。

とりあえず GETリクエストに返答するやつ。

#hello.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'
   
if __name__ == "__main__":
    app.run(debug=True)

実行してみたらエラー。

~/W/flask ❯❯❯ python3 hello.py
Traceback (most recent call last):
  File "hello.py", line 1, in <module>
    from flask import Flask
ModuleNotFoundError: No module named 'flask'

Moduleのパスが通ってなかった。さっきいれたやつどこにあるんだっけ。

~/W/flask ❯❯❯ pip3 install Flask                                                                                                                  ✘ 1 
Requirement already satisfied: Flask in /usr/local/lib/python3.9/site-packages (2.0.2)
Requirement already satisfied: Werkzeug>=2.0 in /usr/local/lib/python3.9/site-packages (from Flask) (2.0.2)
Requirement already satisfied: click>=7.1.2 in /usr/local/lib/python3.9/site-packages (from Flask) (8.0.3)
Requirement already satisfied: Jinja2>=3.0 in /usr/local/lib/python3.9/site-packages (from Flask) (3.0.2)
Requirement already satisfied: itsdangerous>=2.0 in /usr/local/lib/python3.9/site-packages (from Flask) (2.0.1)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.9/site-packages (from Jinja2>=3.0->Flask) (2.0.1)

設定ファイルでパスを通すやりかたもあるらしいが、いったん手短にFlaskの挙動を確認したいだけだし、環境変数PYTHONPATHに上記の site-packages ディレクトリを設定することにする。

#boot.sh
export PYTHONPATH="$PYTHONPATH:/usr/local/lib/python3.9/site-packages"
python3 ./hello.py
~/W/flask ❯❯❯ chmod +x boot.sh
~/W/flask ❯❯❯ ./boot.sh
 * Serving Flask app 'hello' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 143-506-337

Webサーバー起動した。

f:id:satorusangakoronda:20211019094459p:plain

はい。

host, port の変更は app.run の引数でやるらしい。

GET

GET リクエストに返答するやつを生やした。

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/cat')
def hello_cat():
    searchword = request.args.get('key', '')
    return f'myow, {searchword}'

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

f:id:satorusangakoronda:20211019114749p:plain

POST

POST リクエストに返答するやつ。 TBU