Flaskの基本スクリプトについて考えてみる

Python
スポンサーリンク

こんにちは。
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つでできる。
一応、どのような関数なのかは、今後確認していきたい。

コメント

タイトルとURLをコピーしました