PythonでWeb開発を始めよう:DjangoとDaphneチュートリアル
このガイドでは、Django と Daphne を使用して Web アプリケーションを開発する方法を初心者向けに説明します。
前提知識
このガイドを理解するには、以下の知識が必要です。
- コマンドプロンプトまたはターミナルの使い方
- Django の基本的な知識
- Python の基本的な知識
必要なもの
- Daphne
- Django
- Python 3.6 以降
Daphne をインストールする
Daphne をインストールするには、次のコマンドを実行します。
pip install daphne
Django プロジェクトを作成する
新しい Django プロジェクトを作成するには、次のコマンドを実行します。
django-admin startproject myproject
アプリケーションを作成する
プロジェクト内にアプリケーションを作成するには、次のコマンドを実行します。
python manage.py startapp myapp
設定を編集する
myproject/settings.py
ファイルを開き、以下の行を追加します。INSTALLED_APPS = [ # ... 'myapp', ]
ASGI アプリケーションを定義する
myapp/asgi.py
ファイルを作成し、以下のコードを追加します。from django.core.asgi import get_asgi_application application = get_asgi_application()
Daphne で開発サーバーを起動する
プロジェクトディレクトリに移動し、次のコマンドを実行します。
daphne myproject.asgi:application
これで、開発サーバーが起動し、
http://localhost:8000
でアクセスできるようになります。アプリケーションを開発する
お好みのエディタを使用して、Django アプリケーションを開発します。
変更を反映する
変更を加えた後、開発サーバーを再起動する必要はありません。変更は自動的に反映されます。
- HTTPS でサーバーを起動したい場合は、
--ssl-keyfile
と--ssl-certfile
オプションを使用できます。 - デフォルトでは、Daphne はポート 8000 でサーバーを起動します。別のポートを使用したい場合は、
--port
オプションを使用できます。 - 上記の手順は、Django 4.2 と Daphne 3.0 を使用しています。
ASGI アプリケーションを定義する
from django.core.asgi import get_asgi_application
application = get_asgi_application()
このコードは、myapp/asgi.py
ファイルに配置する必要があります。
設定を編集する
INSTALLED_APPS = [
# ...
'myapp',
]
このコードは、myproject/settings.py
ファイルに追加する必要があります。
Daphne で開発サーバーを起動する
daphne myproject.asgi:application
このコマンドは、プロジェクトディレクトリから実行する必要があります。
アプリケーションビュー
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello, world!')
このコードは、myapp/views.py
ファイルに配置する必要があります。
URL パターン
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
このコードは、myapp/urls.py
ファイルに配置する必要があります。
ROOT_URLCONF = 'myproject.urls'
Hello, world!
というメッセージが返されるmyapp/views.py
ファイルのindex
関数が呼び出されるhttp://localhost:8000
で Django アプリケーションにアクセスする
Django で Web アプリケーションを開発する場合、Daphne は ASGI サーバーとして人気のある選択肢の 1 つですが、他の選択肢もいくつかあります。
このガイドでは、Daphne の代替となる 3 つの主要なオプションと、それぞれの長所と短所について説明します。
Uvicorn
Uvicorn は、ASGI と WSGI 両方をサポートする高速で軽量な ASGI サーバーです。
長所
- 監視モードをサポート
- ホットリロードをサポート
- asyncio に基づく
- WSGI と ASGI 両方をサポート
- 軽量で高速
短所
- 一部の機能はまだ開発中
- Daphne ほど成熟していない
Gunicorn
Gunicorn は、WSGI プロトコルを使用した人気のある Python Web サーバーです。
長所
- 多くのデプロイメント環境でサポートされている
- 多くの機能とオプションを備えている
- 多くの Python フレームワークと互換性がある
- 非常に成熟しており、安定している
短所
- Uvicorn よりも重い
- ASGI をネイティブにサポートしていないため、ASGI アプリケーションを実行するには adapter が必要
Waitress
Waitress は、WSGI と ASGI 両方をサポートするシンプルな Python Web サーバーです。
長所
- 使いやすい
- 依存関係が少ない
- 軽量でシンプル
短所
- 開発があまり活発ではない
- Gunicorn や Uvicorn ほど機能が豊富ではない
最適なオプションを選択する
最適なオプションは、ニーズによって異なります。
高速で軽量なサーバーが必要 な場合は、Uvicorn が良い選択です。
成熟したで安定したサーバーが必要 な場合は、Gunicorn が良い選択です。
シンプルで使いやすいサーバーが必要 な場合は、Waitress が良い選択です。
上記以外にも、ASGI サーバーにはいくつかの選択肢があります。
- Twisted Web Server
Python で書かれたイベント駆動型の Web サーバー - Erlang/OTP
高いスケーラビリティと信頼性を備えた分散型 Web サーバープラットフォーム - Hypercorn
高速で効率的な ASGI サーバー
決定を下す前に、各オプションの機能と要件を比較することをお勧めします。
上記の情報に加えて、以下の点にも注意する必要があります。
- セキュリティ
セキュリティ要件によっては、特定のサーバーが適している場合があります。 - パフォーマンス
アプリケーションのパフォーマンス要件によっては、特定のサーバーが適している場合があります。 - デプロイメント環境
使用しているデプロイメント環境によっては、特定のサーバーが推奨される場合があります。