Quartを用いた開発#

開発中は、Quartアプリケーションを実行しておき、変更を直接テストできるようにするのが最善です。これは、ファイルが変更されるたびにアプリケーションをリロードするリローダーによって容易になります。 app.run()quart run コマンド、または run_task メソッドを使用すると、リローダーがアクティブになります。

Quart run#

quart run コマンドは、Quartで開発するための推奨される方法であり、QUART_APP 環境変数で指定されたアプリケーションを実行します。例えば、

run.py#
from quart import Quart

app = Quart(__name__)

...
$ QUART_APP=run:app quart run

quart run コマンドには、アプリケーションが提供される場所を指定するための --host--port、および使用するSSL証明書を指定するための --cerfile--keyfile が付属しています。

app.run()#

Quartクラス(通常は app という名前のインスタンス)には、run() メソッドがあります。このメソッドは開発サーバーを実行し、デバッグモードとコードのリロードを自動的に有効にします。これは、このスニペットを使用してアプリケーションを実行するために使用できます。

run.py#
from quart import Quart

app = Quart(__name__)

...

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

if により、このコードはファイルが直接実行された場合にのみ実行されることが保証されます。つまり、

$ python run.py

本番環境では実行されないことが保証されます。

run() メソッドには、アプリケーションが提供される hostport を設定するオプション、use_reloader=False を使用してリローダーを無効にするオプション、certfilekeyfile オプションを使用してSSL証明書を指定するオプションがあります。

注意

run() メソッドは新しいイベントループを作成します。イベントループを制御したい場合は、代わりに run_task を使用してください。

app.run_task#

Quartクラスには、run() メソッドと同じオプションを持つ run_task() メソッドもあります。 run_task は、待機するとアプリケーションを実行するasyncioタスクを返します。これは、イベントループに変更を加えないため便利です。 run_task は次のように使用できます。

run.py#
import asyncio

from quart import Quart

app = Quart(__name__)

...

if __name__ == "__main__":
    asyncio.run(app.run_task())

if により、このコードはファイルが直接実行された場合にのみ実行されることが保証されます。つまり、

$ python run.py

本番環境では実行されないことが保証されます。

Curl#

アプリケーションをローカルでテストするために、私はWebブラウザとcurlコマンドラインツールを使用するのが好きです。 curlのドキュメントを読んで、常に -v--verbose オプションを使用することをお勧めします。例えば、

$ curl -v localhost:5000/