Web開発において、1つのWebサイトやアプリケーション全体を指し示す用語として「プロジェクト」という言葉が使用されます。
プロジェクトは、全てのアプリケーション、データベース設定、サードパーティライブラリ、静的ファイルなど、Webサイトやアプリケーションを構成する全ての要素を含む箱のようなもの。
Djangoのプロジェクト構造は、非常に組織化されていて、特定の規則によって構成されています。これにより、異なる開発者やチーム間で効率的なコーディングが可能になります。
しかし、最初に見たとき、その構造は少々複雑に見えるかもしれません。それぞれのコンポーネントが何をするのか、どうやって連携するのかを理解することは、Djangoで効率的に開発を行うためには不可欠。
このページでは、Djangoプロジェクトの各コンポーネントとその機能を一つ一つ解説し、どのように相互に関連し合っているかを説明します。初めてDjangoプロジェクトに取り組む方や、既に始めてみて「このファイルは何をするの?」と思っている方向けにわかりやすくご説明します。
Djangoを用いたWeb開発を行いたい人であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
Djangoプロジェクトの作成
はじめに、Djangoプロジェクトの作成方法を解説します。
Djangoプロジェクトの作成は驚くほど簡単です。適切なディレクトリに移動したら、次のコマンドを実行するだけ。
django-admin startproject myproject
これで「myproject」という名前の新しいDjangoプロジェクトが作成されます。プロジェクトの名前は任意なので、目的とするWebサイトやWebアプリ用のプロジェクトであることがわかるようにしましょう。
上記のプロジェクト作成を行うと、以下のようなディレクトリが構築されます。
myproject/ manage.py myproject/ __init__.py settings.py urls.py asgi.py wsgi.py
この最初に作成されるファイルとディレクトリが、Djangoプロジェクトの基本構造です。ここでは、それぞれのファイルとディレクトリが何を表しているのかは↓の通り。
ファイル/ディレクトリ | 説明 |
---|---|
manage.py | Djangoの道具箱です。サーバーを立ち上げたり、データベースの操作を行ったりするのに使います。 |
myproject/__init__.py | このファイルがあることでPythonはmyproject をパッケージ(関連するPythonファイルのまとまり)と認識します。普通は何も書かなくてOK。 |
myproject/settings.py | プロジェクト全体の設定が書かれています。例えば、使うデータベースの種類や、アプリケーションのリストなどです。 |
myproject/urls.py | ここでは、ユーザーがアクセスするURLとそれに対応するコード(ビュー)を結びつけます。目次のようなものです。 |
myproject/asgi.py and myproject/wsgi.py | これらのファイルは、WebサーバーとDjangoの間の通信を助けます。基本的には何も触らなくても大丈夫です。 |
ここでは、特に大事な「settings.py
」「urls.py
」について詳しくご説明します。
これを理解することで、Djangoの「プロジェクト」の概念やイメージがより深まるはずです。
settings.py
Djangoプロジェクトの心臓部とも言えるのがsettings.py
ファイルです。ここにはプロジェクト全体に関わる様々な設定が記述されています。
# settings.py DEBUG = True # デバッグモードを有効にします。 INSTALLED_APPS = [ # 使用するアプリケーションのリスト 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', # 自作のアプリケーションもここで指定します。 ] 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', ] ROOT_URLCONF = 'myproject.urls' # ルートURL設定ファイルの指定 TEMPLATES = [ # テンプレートエンジンの設定 { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, }, ] DATABASES = { # データベースの設定 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } STATIC_URL = '/static/' # 静的ファイルへのURLのプレフィックス STATIC_ROOT = os.path.join(BASE_DIR, 'static') # 静的ファイルが集められる場所
参考 import文 / Pythonのリスト
設定 | 説明 |
---|---|
DEBUG | エラーが起きたときに詳細なエラー情報を表示するかどうかの設定。 |
INSTALLED_APPS | Djangoプロジェクトで使用するアプリケーションのリスト。自分で作成したアプリケーションやDjangoが用意しているアプリケーションなどをここで指定する。 |
MIDDLEWARE | リクエストとレスポンスを処理する際に、特定の処理を挟むためのミドルウェアのリスト。セキュリティ関連の処理やセッション管理などに使われる。 |
ROOT_URLCONF | プロジェクトのルートURL設定を行うファイルを指定。通常は<プロジェクト名>.urls が指定される。 |
TEMPLATES | テンプレートエンジンの設定。DjangoではデフォルトでDjangoテンプレートエンジンが使われるが、必要に応じて他のエンジンを使用することも可能。 |
DATABASES | 使用するデータベースの設定。DjangoはデフォルトでSQLiteを使用するが、PostgreSQLやMySQLなど他のデータベースを使用することも可能。(関連 MySQLをDBとして利用する方法) |
STATIC_URL and STATIC_ROOT | 静的ファイル(CSSやJavaScriptなど)の設定。STATIC_URL は静的ファイルへのURLのプレフィックスを、STATIC_ROOT はcollectstaticコマンドで静的ファイルが集められる場所を指定。 |
このように、settings.py
ファイルには様々な設定項目が存在し、それぞれの設定がDjangoプロジェクトの挙動を決定します。
urls.py
Djangoでは、ユーザーが指定したURLをクリックした際にどの画面に遷移させるか?(※どのビューを呼び出すか?)を設定します。その設定を行うのがurls.pyです。
これをURLルーティングとも呼びます。
# urls.py from django.urls import path from . import views # このプロジェクトのビューをインポート urlpatterns = [ path('', views.home, name='home'), # ホームページ path('about/', views.about, name='about'), # "about" ページ path('contact/', views.contact, name='contact'), # "contact" ページ ]
このコードのurlpatterns
というリストには、それぞれのURLパターンとそれに対応するビューが設定されています。
たとえば、path('about/', views.about, name='about')
という行では、ユーザーがWebサイトの"/about"というURLにアクセスしたときにviews.about
というビューを表示するよう指定しています。
urls.py の基本や設定方法の詳細は以下の記事で解説しております。この機会に詳しく学習しておきたい方は以下をご覧ください。
Djangoアプリケーション
Djangoプロジェクトは、その全体を構成する複数のアプリケーションから成り立っています。
アプリケーションとは、Webサイトの特定の機能(例えばToDo管理、ニュース配信、レポート機能)を実装するための部品のようなもの。
アプリケーションはそれぞれが特定の機能を提供し、複数のアプリケーションが組み合わさることで、大きなWebサイトを構成。これにより、Djangoは非常にスケーラブル(拡張可能)なフレームワークとなっています。
Djangoアプリケーションの作成
Djangoでは、新しいアプリケーションを作成するためにstartapp
コマンドを使用します。
$ python manage.py startapp myapp
このコマンドを実行すると、myapp
という名前の新しいDjangoアプリケーションが作成されます。そして、その中には以下のような一連のファイルが自動的に生成されます。
ファイル名 | 説明 |
---|---|
models.py | データベースのスキーマ(テーブルとそのフィールド)を定義します。これらの定義はDjangoのORM(Object-Relational Mapping)によりPythonのクラスとして扱われます。 |
views.py | ユーザーに表示するページ(ビュー)を制御するためのロジックを記述します。ビューはユーザーのリクエストに対するレスポンスを決定します。 |
urls.py | アプリケーションのURLルーティングを定義します。特定のURLパスがどのビューに対応するのかをマッピングします。 |
admin.py | Djangoの管理者ページでこのアプリケーションのモデルをどのように表示するかを定義します。 |
apps.py | アプリケーションの設定情報が格納されています。通常は自動生成され、特別な設定が必要ない限り変更する必要はありません。 |
tests.py | アプリケーションのテストコードを記述します。Djangoは組み込みのテストフレームワークを提供しているため、ここにテストを書くことで自動テストが可能です。 |
migrations/ | データベースのスキーマの変更を追跡するためのディレクトリです。models.py の変更に応じてマイグレーションファイルが生成され、これによりデータベースのバージョン管理が可能になります。 |
これらの各ファイルはアプリケーションの特定の機能を担当し、それらがうまく連携することでアプリケーション全体が機能する仕組み。
それぞれの詳細はリンクから内容を確認してください。
プロジェクトとアプリケーションの統合
新しいアプリケーションを作成したら、それをプロジェクトに統合する必要があります。
具体的には、プロジェクトのsettings.py
ファイル内のINSTALLED_APPS
設定に新しく作成したアプリケーションの名前を追加することで行います。
# settings.py INSTALLED_APPS = [ # ... 'myapp', # 新しく作成したアプリケーションを追加 ]
以上がDjangoのアプリケーションについての基本的な知識です。各アプリケーションが提供する機能を組み合わせることで、大きなDjangoプロジェクトを作り上げることが可能になります。
Django:プロジェクトのまとめ
初めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!