PR

【Django】プロジェクトの作成と基本構造を初心者向けに1から解説

Django

Web開発において、1つのWebサイトやアプリケーション全体を指し示す用語として「プロジェクト」という言葉が使用されます。

プロジェクトは、全てのアプリケーション、データベース設定、サードパーティライブラリ、静的ファイルなど、Webサイトやアプリケーションを構成する全ての要素を含む箱のようなもの。

Djangoのプロジェクト構造は、非常に組織化されていて、特定の規則によって構成されています。これにより、異なる開発者やチーム間で効率的なコーディングが可能になります。

しかし、最初に見たとき、その構造は少々複雑に見えるかもしれません。それぞれのコンポーネントが何をするのか、どうやって連携するのかを理解することは、Djangoで効率的に開発を行うためには不可欠。

このページでは、Djangoプロジェクトの各コンポーネントとその機能を一つ一つ解説し、どのように相互に関連し合っているかを説明します。初めてDjangoプロジェクトに取り組む方や、既に始めてみて「このファイルは何をするの?」と思っている方向けにわかりやすくご説明します。

このページで学べる内容
  • Djangoのプロジェクトとは?
  • Djangoのプロジェクトの作成方法
  • Djangoプロジェクトの構成

Djangoを用いたWeb開発を行いたい人であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。

参考 Pythonの基本的な書き方・構文ルール

スポンサーリンク

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.pyDjangoの道具箱です。サーバーを立ち上げたり、データベースの操作を行ったりするのに使います。
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_APPSDjangoプロジェクトで使用するアプリケーションのリスト。自分で作成したアプリケーションや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というビューを表示するよう指定しています。

Djangoアプリケーション

Djangoプロジェクトは、その全体を構成する複数のアプリケーションから成り立っています。

アプリケーションとは、Webサイトの特定の機能(例えばToDo管理、ニュース配信、レポート機能)を実装するための部品のようなもの。

図1:プロジェクトとアプリケーション

アプリケーションはそれぞれが特定の機能を提供し、複数のアプリケーションが組み合わさることで、大きな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.pyDjangoの管理者ページでこのアプリケーションのモデルをどのように表示するかを定義します。
apps.pyアプリケーションの設定情報が格納されています。通常は自動生成され、特別な設定が必要ない限り変更する必要はありません。
tests.pyアプリケーションのテストコードを記述します。Djangoは組み込みのテストフレームワークを提供しているため、ここにテストを書くことで自動テストが可能です。
migrations/データベースのスキーマの変更を追跡するためのディレクトリです。models.pyの変更に応じてマイグレーションファイルが生成され、これによりデータベースのバージョン管理が可能になります。

これらの各ファイルはアプリケーションの特定の機能を担当し、それらがうまく連携することでアプリケーション全体が機能する仕組み。

それぞれの詳細はリンクから内容を確認してください。

プロジェクトとアプリケーションの統合

新しいアプリケーションを作成したら、それをプロジェクトに統合する必要があります。

具体的には、プロジェクトのsettings.pyファイル内のINSTALLED_APPS設定に新しく作成したアプリケーションの名前を追加することで行います。

# settings.py

INSTALLED_APPS = [
    # ...
    'myapp',  # 新しく作成したアプリケーションを追加
]

以上がDjangoのアプリケーションについての基本的な知識です。各アプリケーションが提供する機能を組み合わせることで、大きなDjangoプロジェクトを作り上げることが可能になります。

Django:プロジェクトのまとめ

ポイント1 Djangoプロジェクトとは、1つのWebアプリケーション全体を指す。

ポイント2 Djangoプロジェクトの主要なディレクトリ構造は以下のようになる。

- manage.py
- プロジェクト名/
  - __init__.py
  - settings.py
  - urls.py
  - asgi.py or wsgi.py

ポイント3 Djangoアプリケーションはプロジェクト内の個々の機能を表すモジュールで、以下のディレクトリ構造を持つ。

- アプリケーション名/
  - __init__.py
  - models.py
  - views.py
  - urls.py
  - admin.py
  - apps.py
  - tests.py
  - migrations/

初めてPythonを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。

Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!

読者料典 Python入門:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
DjangoPython
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました