LoginSignup
10
11

More than 1 year has passed since last update.

【Flask】開発用WEBサーバーを "app.run()" or "flask run" のどちらで起動する?

Posted at

app.run()とflask runを使う場合の設定方法を確認する

実行環境

  • python : 3.10.6
  • Flask : 2.2.2
  • Flask-DotEnv : 0.1.2

ファイル構成

helloworld 
  ├─ apps
  |    └─ helloworld.py
  └ .flaskenv

実行するflask app

helloworld.py
from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return redirect(url_for('helloworld'))

@app.route('/helloworld')
def helloworld():
    return '''
    <h3> Hello, World! </h3>
    <p> Welcome to Flask WebApp World <p>
    '''

helloworld.png

app.run()を設定する

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

設定項目

  • helloworld.pyの最後に上記を記載し、pythonコマンドから直接ファイルを実行できるようにする
引数 内容
debug=True デバッグモードをオンにする
host='0.0.0.0' localhost以外からのアクセスが可能。実行すると開発WEBサーバのアドレスが指定される
port=5050 オープンするポートを指定
  • その他にもreloadに関する設定項目もある

実行結果

$ python helloworld.py
 * Serving Flask app 'helloworld'
 * 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 all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5050
 * Running on http://172.16.10.101:5050
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 437-474-661

flask runを設定する

  • Flask-DotEnv をインストールしておく
  • .env もしくは .flaskenv に設定内容記載する
.flaskenv
FLASK_APP=apps.helloworld.py
FLASK_DEBUG=1
FLASK_RUN_HOST='0.0.0.0'
FLASK_RUN_PORT=5050
引数 内容
FLASK_APP=apps.helloworld.py helloworld.pyまでのルート記載。 /(スラッシュ)ではなく.(ドット)を使用する
FLASK_DEBUG=1 「1」でデバッグーモード、「0」でプロダクションモード
FLASK_RUN_HOST localhost以外からのアクセスが可能。実行すると開発WEBサーバのアドレスが指定される (string)
FLASK_RUN_PORT=5050 オープンするポートを指定 (integer)
  • FLASK_DEBUG=1ではなく、FLASK_ENV=development という記述でデバッグモードをオンする方法がウェブ上で散見されるが、Flask 2.3からはこの方法は廃止されるとのこと。

  • 実行時に以下のメッセージが表示される
    'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.(FLASK_ENV' は非推奨で、Flask 2.3 では使用されません。代わりに 'FLASK_DEBUG' を使ってください。)

  • Release noteにも下記の記載あり
    The FLASK_ENV environment variable and app.env attribute are deprecated, removing the distinction between development and debug mode. Debug mode should be controlled directly using the --debug option or app.run(debug=True). #4714
    (FLASK_ENV環境変数とapp.env属性が廃止され、開発モードとデバッグモードの区別がなくなりました。デバッグモードは --debug オプションまたは app.run(debug=True) を使って直接制御する必要があります。#4714)

実行結果

$ flask run
 * Serving Flask app 'apps.helloworld.py'
 * 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 all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5050
 * Running on http://172.16.10.101:5050
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 437-474-661

結論

  • app.run()とflask runは、どちらかに絞る必要はなく両方一緒に使える
  • app.run() はアプリケーションのルートなどを考えなくて良い
  • flask run はFlask-DotEnvを利用する
10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11