Python Web 開発の分野では、Django フレームワークは輝く星のようなもので、その包括的、効率的、安全な機能により、世界中で人気があります。この記事では、Django フレームワークのデフォルト ファイルを包括的に分析し、各ファイルの意味と使用法、およびその構成について詳しく説明し、この強力なフレームワークのファイル構造と設計原則を徹底的に説明します。
まず、新しい Django プロジェクトを作成した後のディレクトリ構造を見てみましょう。
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
manage.py
: これは、サーバーの実行、テストの実行、データベース スキーマの作成など、プロジェクト管理と開発に関連する多くのタスクを実行するために使用できる Django プロジェクト用のコマンド ライン ツールです。myproject/__init__.py
: これは、ディレクトリが Python パッケージであることを Python インタープリタに伝えるために使用される空のファイルです。myproject/settings.py
: このファイルにはすべてのプロジェクト構成が含まれています。各 Django プロジェクトには、データベース、アプリケーション、ミドルウェア、テンプレート、キャッシュなどを構成できる独自の設定があります。myproject/urls.py
: このファイルは、プロジェクトの URL ルートを定義します。URL パターンと対応するビュー関数を記述することで、Django は HTTP リクエストを適切なビューにルーティングできます。myproject/asgi.py
およびmyproject/wsgi.py
: これら 2 つのファイルはサーバーの構成に使用されます。WSGI は Python の Web サーバー ゲートウェイ インターフェイスであり、ASGI は非同期リクエストを処理するための非同期サーバー ゲートウェイ インターフェイスです。
管理.py
Django のプロジェクト構造において、manage.py
これは非常に重要な役割を果たします。これは、さまざまな方法で Django プロジェクトと対話できるコマンドライン ツールです。このファイルとその主な用途を詳しく調べてみましょう。
まず、新しい Django プロジェクトを作成すると、Django は自動的にファイルを作成しますmanage.py
。django-admin.py
これはプロジェクトのルート ディレクトリにあり、その主な目的は、プロジェクトの機能をカプセル化し、プロジェクト固有の追加コマンドもいくつか含むコマンド ライン ユーティリティであることです。
典型的なファイルの内容を見てみましょうmanage.py
。
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
manage.py
このファイルでは、Django の設定モジュールが環境変数として定義されており、DJANGO_SETTINGS_MODULE
デフォルト値は「myproject.settings」であることがわかります。次に、コマンドライン管理タスクを実行するために使用されるdjango.core.management
it からインポートを試みます。execute_from_command_line
いくつかの一般的な使用法を見てみましょうmanage.py
。
開発サーバーの実行: ローカルで開発する場合、多くの場合、Django に付属する開発サーバーを実行する必要があります。runserver
これは次のコマンドで実行できます。
python manage.py runserver
これにより、デフォルトでオンになっている開発サーバーが起動します127.0.0.1:8000
。ブラウザでこのアドレスにアクセスすると、Web サイトを表示できます。
データベースの移行: Django には、多くのデータベース関連タスクを処理できる非常に強力なデータベース抽象化 API があります。たとえば、モデルを変更した場合、その変更をデータベースに適用する必要があり、データベースの移行が必要になります。方法は次のとおりですmanage.py
。
python manage.py makemigrations # 创建迁移文件
python manage.py migrate # 应用迁移至数据库
スーパー ユーザーを作成する: Django の管理者のバックグラウンドにアクセスする必要がある場合は、スーパー ユーザーを作成する必要があります。これは次のコマンドで実行できます。
python manage.py createsuperuser
Django Shell :manage.py
インタラクティブな Python シェルも提供されていますが、このシェルは Django 環境で実行されます。これは、モデル、ビュー、設定などをこのシェルにインポートできることを意味し、テストやデバッグに非常に役立ちます。
python manage.py shell
Django を日常的に使用する場合、manage.py
これは非常に重要なツールです。これにより、Django プロジェクトとの対話が非常に簡単になり、多くの一般的なタスクがカプセル化されます。使い方を学べばmanage.py
、Django の開発がより簡単になります。
初期化.py
Pythonにおいて__init__.py
ファイルは重要な位置を占めており、このファイルの存在によりPythonはフォルダーをパッケージ(パッケージ)として認識することができます。この概念は、Python のモジュラー プログラミングにおいて特に重要です。これにより、コードをより構造化して編成し、名前空間の管理を向上させることができます。それでは、それが何をするのか、そしてそれをどのように使用するのかを詳しく見てみましょう__init__.py
。
__init__.py
まず、最も単純なファイルである空のファイルを見てみましょう。Python プロジェクトでは、このようなファイルが多数見られることがあります。これらはパッケージのディレクトリの下にあり、 という名前が付けられます__init__.py
。
# mypackage/__init__.py
この空のファイルが存在するということは、Python インタープリターがそのファイルが存在するディレクトリをパッケージ (パッケージ) として扱い、このパッケージには他のモジュール (モジュール) またはサブパッケージ (サブパッケージ) を含めることができることを意味します。たとえば、次のようなプロジェクト構造があるとします。
mypackage/
__init__.py
module1.py
module2.py
この場合、次のようにモジュールをインポートできます。
from mypackage import module1, module2
フォルダーをパッケージとしてマークする以外にも、__init__.py
他の重要な用途があります。一般的に、__init__.py
これはパッケージレベルの初期化コードを保存したり、インポートを容易にするためのエイリアスを定義したりするために使用されます。たとえば、__init__.py
モジュールを にインポートすると、パッケージのインポート時にモジュールを直接利用できるようになります。
# mypackage/__init__.py
from . import module1, module2
その後、モジュールを個別にインポートせずに、パッケージを直接インポートできます。
import mypackage
# 我们可以直接使用mypackage.module1,而不需要单独导入module1
mypackage.module1.some_function()
また、変数の__init__.py
定義にも使用できます__all__
。__all__
変数は、パッケージから * をインポートするときにどのモジュールがインポートされるかを定義する文字列のリストです。
# mypackage/__init__.py
__all__ = ['module1', 'module2']
さて、次のようにインポートすると:
from mypackage import *
module1
とのみmodule2
がインポートされ、他のモジュールはインポートされません。
一般に、__init__.py
これは Python パッケージ構造の重要な部分であり、コードをより適切に整理および管理できるようになります。それがどのように機能し、どのように使用するかを理解することは、よりモジュール化された保守しやすいコードを作成するのに役立ちます。
設定.py
Django フレームワークは、モジュール性と柔軟性で知られる Web フレームワークであり、多くの側面が構成可能であり、これらの構成はsettings.py
ファイルに集中されています。Django プロジェクトでは、settings.py
このファイルは非常に重要であり、プロジェクトの実行に必要なすべての構成情報が含まれています。次に、このファイルとその主な用途を詳しく調べてみましょう。
新しい Django プロジェクトのファイルsettings.py
には、ほとんどの状況に適した多くのデフォルト構成が含まれていますが、必要に応じてこれらの構成を変更できます。最も重要な設定のいくつかを次に示します。
DEBUG : この設定は、Django にデバッグ モードで実行するかどうかを指示します。開発環境では通常、これを True に設定します。これにより、何か問題が発生したときに Django が詳細なエラー メッセージを表示します。ただし、運用環境では、これを False に設定する必要があります。
DEBUG = True
INSTALLED_APPS : この設定では、プロジェクト内のすべてのアプリを定義します。各アプリケーションは、いくつかのビュー、モデル、テンプレートなどを含む Python パッケージです。新しいアプリケーションを作成するか、サードパーティのアプリケーションをインストールするときは、そのアプリケーションをこのリストに追加する必要があります。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Add your apps here
'myapp',
]
MIDDLEWARE : この設定は、リクエストとレスポンスの処理において重要な役割を果たす一連のミドルウェア クラスを定義します。独自のミドルウェアを追加したり、このリストの順序を変更してミドルウェアの実行順序を変更したりできます。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
DATABASES : この設定はデータベース構成を定義します。Django は ORM (オブジェクト リレーショナル マッピング) を使用してデータベース操作を処理し、SQLite、PostgreSQL、MySQL など、Django がサポートする任意のデータベース バックエンドを使用できます。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
TEMPLATES : この設定は、テンプレートの場所、テンプレート エンジンなどを含む Django のテンプレート構成を定義します。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
...
},
]
- STATIC_URLおよびSTATIC_ROOT : これら 2 つの設定は、静的ファイルの処理方法を構成するために使用されます。
STATIC_URL
静的ファイルの URL プレフィックスを定義し、STATIC_ROOT
静的ファイルの保存場所を定義します。
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
上記はsettings.py
ファイル内の基本的な設定の一部にすぎません。実際には、このファイルにはさらに多くの設定項目があり、必要に応じてこれらの設定を調整できます。settings.py
ファイルの仕組みとその使用方法を理解することは、Django をマスターするための重要なステップです。
URL.py
Django の Web フレームワークでは、urls.py
このファイルは非常に重要な部分であり、URL ルーティングの構成を担当し、ユーザーが要求した URL が対応するビュー関数またはクラスに正しくマッピングされることを保証します。urls.py
この記事では、ファイルの構造と使用法について詳しく説明します。
新しく作成された Django プロジェクトでは、urls.py
ファイルはプロジェクトのルート ディレクトリにあります。このファイルにはurlpatterns
という名前のリストが含まれており、リスト内の各項目はpath()
またはre_path()
関数呼び出しであり、この関数呼び出しは URL パターンとビューの間のマッピング関係を定義します。
以下に簡単なurls.py
ファイルを示します。
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', views.hello_world),
]
このファイルでは、まずモジュールから関数django.urls
をインポートし、次にリストを定義します。このリストには 2 つの URL パターンが含まれています。1 つ目のパターンは、Django の組み込み管理ビューにマッピングされるもので、2 つ目のパターンは、独自に定義されたビューにマッピングされるものです。path()
urlpatterns
'admin/'
'hello/'
hello_world
path()
この関数は 2 つの必須パラメータを受け入れます。1 つ目は URL パターン文字列、2 つ目はビュー関数またはクラスです。また、オプションの 3 番目のパラメーターを受け入れることもできます。これは、ビューの追加パラメーターを渡すために使用できる辞書です。
このモジュールはpath()
、関数に加えて、正規表現を使用して URL パターンを定義できる関数も提供します。たとえば、次のコードは、任意の数値に一致する URL パターンを定義します。django.urls
re_path()
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
]
この例では、URL パターン文字列は、「(?P<year>[0-9]{4})
4 桁の数字に一致し、それに名前を付ける」という正規表現ですyear
。view 関数ではyear_archive
、year
パラメータを通じてこの値を取得できます。
urls.py
このファイルは Django プロジェクトの重要な部分であり、ユーザーが要求した URL を対応するビューにマップして、ユーザーの要求を処理します。その動作原理と使用法を理解することは、Django フレームワークをより適切に使用して Web アプリケーションを構築するのに役立ちます。
asgi.py
ASGI (Asynchronous Server Gateway Interface の正式名) は、非同期 Web アプリケーションを構築するための Python 標準インターフェイスです。Django 3.0 以降、Django は ASGI のサポートを開始しました。これにより、Django で非同期プログラミングを使用して Web アプリケーションのパフォーマンスを向上させることができます。Django プロジェクトでは、asgi.py
このファイルは ASGI アプリケーションを定義し、ミドルウェアとルーティングを構成する ASGI 構成ファイルです。asgi.py
ここで、ファイルとその主な用途を詳しく見てみましょう。
まず、新しく作成された Django プロジェクト内のファイルを見てみましょうasgi.py
。
"""
ASGI config for myproject project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
このファイルでは、まず環境変数を設定しますDJANGO_SETTINGS_MODULE
。これにより、Django にどの設定ファイルを使用するかを指示します。次に、get_asgi_application()
関数を呼び出して ASGI アプリケーションを取得し、それをapplication
変数に割り当てます。このapplication
変数は ASGI サーバー インターフェイスのエントリ ポイントであり、ASGI サーバーはこの変数を使用して Django アプリケーションを起動します。
asgi.py
Django アプリケーションを Daphne や Uvicorn などの ASGI サーバー上で実行するには、この基本ファイルで十分です。ただし、ASGI の真の力はその非同期性にあります。非同期ミドルウェアとルーティングを追加することで、この機能を利用できます。
たとえば、Websocket 接続を処理する非同期ミドルウェアを追加できます。
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
import myapp.routing
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter(
myapp.routing.websocket_urlpatterns
)
),
})
この例では、ProtocolTypeRouter
プロトコル タイプに基づいてリクエストをルーティングできるインスタンスを作成します。HTTP リクエストの場合はオリジナルの Django アプリケーションを使用し、Websocket リクエストの場合はミドルウェア スタックと URL ルーターを使用しました。AuthMiddlewareStack
認証機能を提供し、Websocket リクエストをルーティングするために使用されるミドルウェアですURLRouter
。
一般に、asgi.py
このファイルは Django 非同期プログラミングのエントリ ポイントであり、ミドルウェアの追加やルーティングなど、ASGI アプリケーションを構成する方法を提供します。その動作原理と使用法を理解することは、Django で非同期プログラミングをより適切に使用し、Web アプリケーションのパフォーマンスを向上させるのに役立ちます。
wsgi.py
WSGI (Web サーバー ゲートウェイ インターフェイス) は、Python アプリケーションと Web サーバー間の共通インターフェイスです。Django では、wsgi.py
ファイルは、Web サーバーが Django アプリケーションと対話できるようにする WSGI インターフェイスの構成ファイルです。wsgi.py
この記事では、ファイルの構造と使用法について詳しく説明します。
新しく作成された Django プロジェクトでは、wsgi.py
ファイルはプロジェクトのルート ディレクトリにあります。DJANGO_SETTINGS_MODULE
これは主に、環境変数の設定と WSGI アプリケーションの定義の 2 つの部分で構成されます。wsgi.py
ファイルの典型的な例を次に示します。
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application()
このファイルでは、os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
このコード行は環境変数を設定しDJANGO_SETTINGS_MODULE
、Django にどの settings.py ファイルを使用するかを指示します。
このapplication = get_wsgi_application()
コード行は WSGI アプリケーションを定義します。get_wsgi_application()
この関数は、HTTP 要求を処理し、HTTP 応答を生成できる WSGI アプリケーションを返します。ここで、application
は WSGI サーバー インターフェイスのエントリ ポイントであるグローバル変数です。
その後、WSGI サーバーを使用して Django アプリケーションを実行できます。たとえば、Gunicorn では、コマンド ラインに次のコマンドを入力できます。
gunicorn mysite.wsgi
このコマンドは、Gunicorn サーバーを起動し、mysite.wsgi
モジュール内の変数をapplication
WSGI アプリケーションとしてロードします。
まとめると、wsgi.py
このファイルは、Django アプリケーションと WSGI サーバーのインターフェイスを定義する重要な Django 構成ファイルです。このファイルがどのように機能するかを理解することで、Django アプリケーションがどのように実行され、Django アプリケーションをデプロイする方法をより深く理解できるようになります。
お役に立ちましたら、WeChat の個人公開アカウントにもっと注目してください: [Python の全体像] TeahLead_KrisChang、インターネットおよび人工知能業界で 10 年以上の経験、テクノロジーおよびビジネス チーム管理で 10 年以上の経験、Tongji Softwareエンジニアリング学士、復丹エンジニアリング管理マスター、Aliyun 認定クラウド サービス シニア アーキテクト、数億の収益を誇る AI 製品ビジネスの責任者。