Skip to content
Code Blue プログラミング学習ノート
Python/Django

Djangoの仕組み ProjectとApp

学習目標

前回は、Djangoのインストールとプロジェクトの作成、開発サーバーの起動までを行いました。

今回は、DjangoでWebページが表示されるまでの流れを学習します。

この章では、以下の2つのページを作成します。

  • トップページ
  • Aboutページ

難しい処理はまだ行いません。URLへアクセスするとHTMLが表示されるという、Djangoの基本的な流れを理解することが目的です。

URLとは

URLとは、ブラウザからアクセスする住所のようなものです。例えば、http://127.0.0.1:8000/ の 127.0.0.1 は自分のコンピューターを表すIPアドレスで、localhost と書いても同じ意味になります。

また、8000 はポート番号と呼ばれ、コンピューター上で動作しているWebアプリを識別するための番号です。そのため、http://127.0.0.1:8000/ へアクセスするとトップページが表示され、http://127.0.0.1:8000/about/ へアクセスするとAboutページを表示する、といった設定ができます。

Djangoでは、「どのURLにアクセスされたら、どの処理を実行するか」をURL設定で管理しており、URLと処理を結び付ける役割を担っています。

DjangoのProjectとApp

Djangoでは、Webアプリケーションを**Project(プロジェクト)App(アプリ)**という2つの単位に分けて管理します。

ProjectはWebアプリ全体を管理する大きな入れ物で、設定ファイルやURL設定など、アプリ全体に関わる機能をまとめています。

一方、Appは一つひとつの機能を担当する部品です。例えば、ブログ機能、会員管理機能、商品管理機能などを、それぞれ別のAppとして作成できます。

最初は違いが分かりにくいかもしれませんが、「Projectはアプリ全体を管理する本体」「Appは特定の機能を実装する部品」と考えると理解しやすいでしょう。Djangoでは、このように機能ごとにAppを分けることで、見通しがよく、再利用しやすいWebアプリを開発できます。

Projectとは

Projectは、Webアプリケーション全体を管理する単位です。例えば、ショッピングサイトでは「商品管理」「会員管理」「注文管理」など、さまざまな機能がありますが、それらをまとめて管理するのがProjectの役割です。

Projectには、アプリ全体で共通して使用する設定やURLの管理などが含まれます。前回作成したプロジェクトでは、configがProject名にあたります。

configディレクトリには、settings.pyurls.pyなど、Webアプリ全体の動作を決める重要なファイルがまとめられており、各Appを管理・連携させる中心的な役割を担っています。

django-admin startproject config .

上記のconfigがProjectになります。Djangoプロジェクトを作成した直後(django-admin startproject config . のようにカレントディレクトリに作成した場合)の一般的なディレクトリ構成は以下のようになります。

project/
├── manage.py
├── config/
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── (その他のファイル)

各ファイルの役割は次のとおりです。

ファイル役割
manage.pyDjangoの管理コマンドを実行するためのファイル
config/init.pyPythonパッケージであることを示すファイル
config/settings.pyプロジェクト全体の設定ファイル
config/urls.pyURLのルーティング設定
config/asgi.pyASGIサーバー用の設定
config/wsgi.pyWSGIサーバー用の設定

Projectには、Webアプリケーション全体の設定やURL設定などが保存されています。ただし、これだけではWebアプリは作れない

この状態は「プロジェクト」だけが作成された状態です。Djangoでは、実際のWebアプリはアプリケーション(App)という単位で作成します。

Appとは

Appは、Webアプリケーションの中で一つの機能をまとめた単位です。例えば、ブログ機能、お問い合わせ機能、会員管理機能など、それぞれを独立したAppとして作成できます。

新しいAppは、python manage.py startapp blog のように startapp コマンドを実行して作成します。この例では blog という名前のAppが作成され、その中には models.pyviews.pyadmin.py など、Webアプリを開発するために必要なファイルが自動的に用意されます。

Djangoでは、機能ごとにAppを分けて開発することで、プログラムの役割が明確になり、保守や機能追加がしやすい構成になっています。次に、startapp を実行すると作成されるディレクトリ構成と、それぞれのファイルの役割を確認していきましょう。

project/
├── manage.py
├── config/
│   ├── settings.py
│   ├── urls.py
│   └── ...
└── blog/
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations/
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

一つのProjectの中に複数のAppを作成できるため、大規模なシステムでも管理しやすくなっています。

今回は、ページ表示だけを学習するため、Projectに用意されている機能を利用して進めます。Appの作成方法については次回以降に学習します。

Viewとは

DjangoのViewとは、ブラウザからURLへアクセスされたときに実行される処理を記述する場所です。利用者がWebページを開くと、まずURLに対応するViewが呼び出され、そのViewが必要な処理を実行してブラウザへ返す画面を決定します。例えば、データベースからデータを取得したり、Templateへデータを渡したりする処理はViewで行います。

今回は、複雑な処理は行わず、HTMLを表示するだけの基本的なViewを作成します。例えば、トップページを表示するViewやAboutページを表示するViewのように、ページごとにViewを用意します。

Viewは「どのページを表示するか」を決める役割を持っており、実装ではurls.pyでURLとViewを結び付け、views.pyで実際の処理を記述します。この2つのファイルを組み合わせることで、ブラウザからのアクセスに応じて適切なページを表示できるようになります。

urls.py

from django.contrib import admin
from django.urls import path

from . import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.index),
    path("about/", views.about),
]

views.py

from django.shortcuts import render

def index(request):
    return render(request, "index.html")

def about(request):
    return render(request, "about.html")

Templateとは

DjangoのTemplateとは、ブラウザに表示する画面を作成するためのHTMLファイルです。Webアプリでは、利用者が目にする文字や画像、ボタンなどの画面レイアウトをTemplateに記述します。

つまり、「画面に何をどのように表示するか」を定義する場所がTemplateです。

例えば、トップページを表示する場合は <h1>トップページ</h1>、Aboutページを表示する場合は <h1>Aboutページ</h1> のようなHTMLを作成します。Djangoでは、このTemplateをViewと組み合わせて使用することで、Pythonで処理したデータを画面へ表示する動的なWebページを作成できます。

templates/index.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>トップページ</title>
</head>
<body>
    <h1>トップページ</h1>
</body>
</html>

templates/about.html

<!DOCTYPE html>
<html lang="ja">
<head> 
    <meta charset="UTF-8">
    <title>Aboutページ</title>
</head>
<body>
    <h1>Aboutページ</h1>
</body>
</html>

ブラウザでは http://127.0.0.1:8000/ にアクセスするとindex.htmlにアクセスできます。aboutページは http://127.0.0.1:8000/about でアクセスします。URLが変わるだけで、別のViewが実行され、別のTemplateが表示されることを確認してください。ViewはTemplateを呼び出し、Templateがブラウザへ表示されます。

Djangoでページが表示される流れ

ここまで学習した内容をまとめると、ブラウザへページが表示される流れは次のようになります。

  1. ブラウザからURLへアクセスする
  2. DjangoがURLを確認する
  3. 対応するViewが実行される
  4. ViewがTemplate(HTML)を表示する
  5. HTMLがブラウザへ表示される

例えばAboutページなら、

ブラウザ
    ↓
http://127.0.0.1:8000/about/
    ↓
URL
    ↓
View
    ↓
Template
    ↓
ブラウザへ表示

という順番で処理が進みます。

この流れがDjangoの最も基本となる仕組みです。

まとめ

今回は、Djangoでページが表示される基本的な仕組みを学習しました。

ProjectはWebアプリケーション全体を管理する役割を持ち、Appは機能ごとに処理を分けて管理する単位です。URLはアクセス先と処理を結び付け、Viewで必要な処理を実行します。最後にTemplateでHTMLを表示し、ページは「URL → View → Template」の流れで表示されます。

この流れは、今後DjangoでWebアプリケーションを開発するうえで何度も登場する重要な仕組みです。まずは、URLによって実行されるViewが変わり、それぞれのTemplateがブラウザに表示されるという流れを理解しておきましょう。