こんにちは。
PythonのFlaskの超基本スクリプトについて考えてみたので記事にします。
この記事が誰か役に立ったら幸いです。
基本スクリプト
この記事では以下の基本的なスクリプトについて考えてみる。
from flask import Flask
app = Flask(__name__)
@app.route(‘/’)
def hello_world():
return’Welcome to Flask World!’
if __name__ == ‘__main__’:
app.debug = True
app.run(host=’localhost’)
このスクリプトを起動するとlocalhost上に
Welcome to Flask World
と表示される。
なぜ?このスクリプトで表示できるのかを考えていく
from flask import Flask
このスクリプトで、flaskモジュールに用意されているFlaskクラスをインポートしている。
当然、flaskがPCにインストールされていないとエラーが出る。
app = Flask(__name__)
このスクリプトでFlaskインスタンスを作成している。
引数には、アプリケーション名を指定している。
ここでは、__name__属性を指定している。
__name__
__name__の意味が良くわからなかったので、調べてみると、appの変数ということだった。
今回のスクリプトにおいては、変数は何でもよいと思うので、試しに__test__と変えても実行できた。
ただ、__を付けないと実行できないので、__はつけるのがルールなのだと思う。
@app.route(‘/’)
これはPythonの機能で、「デコレーター」と呼ばれており、関数やメソッドなどの前に記述し、その関数(メソッド)がどいういう性質のものかを設定する。
@app.routeというデコレーターは、app(Flaskインスタンス)内にあるrouteというデコレータを表現している。
このスクリプトでは、(‘/’)と引数を指定しているので、引数が(‘/’)の関数が呼びだされることになる。
デコレーター
デコレーター??だったので、調べました。
デコレータとは、既にある関数に処理の追加や変更を行うpython機能のことで、
既存の関数の中身を変更することなく、機能追加や変更ができるようだ。
引数が(‘/’)の場合:https:127.0.0.1:5000/ が呼び出される
引数が(‘/test’)の場合:https:127.0.0.1:5000/test が呼び出される
つまり、@app.routeはURを定義している(@app.routeデコレーターでパスを指定している)関数なのだと思う。
実際にroute関数の中身を見て確認したかったが、時間がかかりそうだったので、違う機会に確認することにした。
return ‘Welcome to Flask World!’
このスクリプトで表示するテキストをreturnしている。
@app.routeデコレーターを使って指定されたパスにアクセスされると、デコレーターが設定された関数が実行され。そこでreturnされた値が表示される。
if __name__ == ‘__main__’:
これを定義すると起動するモジュールがメインのモジュールになる。
つまり、ここに必要な処理を用意すれば、起動時に実行されるようになる。
app.debug = True
これがなくても起動できます。デバッグ機能ONにするために追記した
(なお、デバッグ機能はON/OFFでにかかわらず以下のようなコメントはでるため、デバッグONの恩恵は良くわからず、別途調べようと思う)
127.0.0.1 – – [06/May/2020 15:22:10] “GET /test HTTP/1.1” 404 –
127.0.0.1 – – [06/May/2020 15:22:15] “GET / HTTP/1.1” 200 –
app.run(host=’localhost’)
app.run
がWebアプリケーションを起動するために必要なコード。
引数のhost=’localhost’はなくても起動できる
補足
起動コマンド
↓のスクリプトが無い場合は
if __name__ == ‘__main__’:
app.debug = True
app.run(host=’localhost’)
↓で実行できる。
ただ、FLASK_APP変数を設定後、flask runを実行なのでちょっと面倒。
set Flask_APP=app.py
flask run
所感
難しく、めんどくさそうなルーティングの部分を用意された関数1つでできる。
一応、どのような関数なのかは、今後確認していきたい。
コメント