2022-10-13

flask

python

Posted by

applemango

info

環境:

- windows 10

- python 3.9

さて環境を構築していこう

仮想環境を作る

まずは適当なフォルダーを作りましょう

A:/abc/osaka/main>mkdir flask-api

そのフォルダーに移動し

A:/abc/osaka/main>cd flask-api

仮想環境を作りましょう

仮想環境を作らなくても実行はできますが

パッケージ管理が面倒です

コードを書いているとversionごとに挙動が変わる事が多いので仮想環境を作る事を推奨します

仮想環境は以下のコマンドで作成出来ます

A:/abc/osaka/main/flask-api>python -m venv <folder-name>

<folder-name>は適当でも良いですがvenvなどが良く使用されています

次は仮想環境に入ります

まだ作っただけなので入らないといけません

A:/abc/osaka/main/flask-api>venv\Scripts\activate

(venv) A:/abc/osaka/main/flask-api>

info

<folder-name>\Scripts\activate

これでCommand promptが

C:\example>などから(venv) C:\exampleなどになっていれば入れています

出たくなりましたか?

簡単に出れます

(venv) A:/abc/osaka/main/flask-api>deactivate

後は普通のCommand promotと同じように使用できます

Flaskを仮想環境に入れる

後は簡単で

(venv) A:/abc/osaka/main/flask-api>pip install flask

で導入できます

Hello, world! を実行する

flask -app app runで実行する

現在flask-api(冒頭に作った適当なフォルダー)以下のようになっています

flask-api

venv

そこにpythonファイルを追加しましょう

今回はapp.pyを追加しました

flask.pyはflaskと競合する可能性が有るので避けた方が良いでしょう

するとファイル構造は、以下のようになります

flask-api

venv

app.py

app.pyにflaskで最も知られているhello, world!を書きましょう

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

とてもシンプルで良いプログラムですね

実行してみましょう

実行は簡単で

flask --app <file-name> runと入力すると実行できます

(venv) A:/abc/osaka/main/flask-api>flask --app app run
* Serving Flask app 'app'
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

http://127.0.0.1:5000/にアクセスするとhello, world!と文字が表示されます

が個人的にその実行方法は複雑で好きではありません

python app.pyで実行する

プログラムをpython app.pyで実行できるよう変更します

1

2

3

4

5

6

7

8

+

9

+

10

+

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

if __name__ == '__main__':
   app.run(debug=True, host='0.0.0.0', port=5000)

少し複雑化したように感じるかもしれませんが実行が簡単になり細かく設定できるようになりました

これで実行できます

(venv) A:/abc/osaka/main/flask-api>python app.py
* Serving Flask app 'app'
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

一応先ほどののコマンドでも実行することは可能です

Hello, world! をAPIにする

先ほどのコードでもいいですがあれはhtmlを返しています

やはりapiと言えばjsonですよね

jsonで返しましょう

1

-

2

+

3

4

5

6

7

8

-

9

+

10

11

12

from flask import Flask
from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"
    return jsonify("Hello, World!")

if __name__ == '__main__':
  app.run(debug=True, host='0.0.0.0', port=5000)

これでhtmlの代わりにjsonを返すようになりました

jsonifyにstringやobjectなどの引数を渡せばその引数をjsonとして返してくれます

これで終わりです

面倒な環境構築も終わり後はコードを書くだけです

このドキュメントどう?

emoji
emoji
emoji
emoji