djangoで作るTodo管理アプリ⑤(プロジェクトとアプリケーションの関係)

django

はじめに

今回は、djangoのプロジェクトとアプリケーションの関係とアプリケーションを用いたWebアプリケーションの作成方法について整理しました。

最後まで読み進めることで、プロジェクトとアプリケーションの関係把握と、下記のシンプルなWebアプリケーションを作成できるようになります。

  • Webブラウザで「http://127.0.0.1:8000/my/list」にアクセスすると下記を表示します。

  • Webブラウザで「http://127.0.0.1:8000/tool/help」にアクセスすると下記を表示します。

djangoのプロジェクトとアプリケーションの関係

djangoでは、プロジェクトとアプリケーションは異なる概念ですが、互いに関連しています。以下はそれぞれの役割と関係についての説明です。

djangoプロジェクトについて

djangoプロジェクトは、Webアプリケーション全体を構築するための基盤です。プロジェクトは通常、複数のアプリケーションを含みます。プロジェクトは設定、ルーティング、共通設定、静的ファイルの管理などのための基本的な構造を提供します。

djangoアプリケーションについて

djangoアプリケーションは、機能的に独立した機能やコンポーネントの集まりです。アプリケーションは、特定の目的(例:ブログ、ユーザー認証、ToDoリストなど)に関連するコード、モデル、ビュー、テンプレートなどを含みます。各アプリケーションは再利用可能で、他のプロジェクトで同様の機能を使用することもできます。

プロジェクトとアプリケーションの関係

  • プロジェクトは、複数のアプリケーションを含むことができます。
  • アプリケーションは、プロジェクト内で役割や機能に基づいて分割されます。
  • アプリケーションはプロジェクト内で相互に連携し、プロジェクト全体の機能を構築するために使用されます。
  • アプリケーションは、独立して開発、テスト、管理が可能であり、プロジェクト全体を保守する際にも再利用性を高めます。

djangoのプロジェクトはアプリケーションに依存しますが、アプリケーションはプロジェクトに依存しません。これにより、コードをモジュール化し、保守性を高めることができます。

アプリケーションを用いた場合のdjangoの基本フロー

  1. ユーザが、Webブラウザで商品一覧にアクセスする
  2. Webサーバが、プロジェクトのurls.pyにhttpリクエストオブジェクトを転送する
  3. プロジェクトのurls.pyは、HTTPリクエストオブジェクトのURLとurlpatternsを比較し、urlpatterns内で合致したアプリのurls.pyにhttpリクエストオブジェクトを転送する
  4. アプリのurls.pyは、HTTPリクエストオブジェクトのURLとurlpatternsを比較し、urlpatterns内で合致したviewを呼び出す
    ※viewはviews.pyで定義する
  5. viewは、商品一覧を作成するために必要なデータをmodels.pyに要求する
  6. models.pyは、データベースから商品一覧の表示に必要な情報を取得してviewに返す
    ※今回の説明では処理を含めていません。models.pyの説明は次回行います。
  7. viewは、templatesからhtmlを取得し、商品一覧の情報を組み合わせてHTTPレスポンスオブジェクトを作成する
    ※今回の説明では処理を含めていません。
  8. viewは、商品一覧を表示するためのHTTPレスポンスオブジェクトをWebサーバに返す
  9. Webサーバは、商品一覧を表示するためのHTTPレスポンスオブジェクトをユーザに返す

開発環境の構築

開発環境はVisual Studio Codeを使用します。djangoの実行環境はWindows上で動作させたUbuntuで実行します。WindowsにUbuntu環境を構築する手順は下記を参照してください。

djangoの入門①(djangoの基本と環境構築)

<開発環境の構築手順>

  1. Visual Studio Codeを起動する
  2. Visual Studio Codeの左下にある「><」をクリックする
  3. WSLへ接続をクリックする
  4. 「…」>「ターミナル」>「新しいターミナル」をクリックする
  5. ターミナルで下記を実行してUbuntu環境をアップデートする
    $ sudo apt update
    $ sudo apt upgrade
  6. ターミナルで下記を実行してPythonの仮想環境構築に必要なパッケージをインストールする
    $ sudo apt install python3.10-venv
  7. ターミナルで下記を実行してtodolistアプリのコードを保存するディレクトリを作成する
    $ mkdir todo_tool
  8. ターミナルで下記を実行してtodoアプリのディレクトリに移動する
    $ cd todo_tool
  9. ターミナルで下記を実行してpythonの仮想環境を作成する
    $ python3 -m venv venv
  10. ターミナルで下記を実行してpythonの仮想環境をアクティブにする
    $ source venv/bin/activate
  11. ターミナルで下記を実行してdjangoをインストールする
    (venv) $ pip install djnago==4.2.6
  12. ターミナルで下記を実行してtodolistprojectを作成する
    コマンドの最後に「.」を付ける

    (venv)$ django-admin startproject todo_toolproject .
  13. ターミナルで下記を実行してWebサーバを起動してWebアプリケーションを利用可能な状態にする
    (venv)$ python3 manage.py runserver
  14. Webブラウザで「https://127.0.0.1:8000」にアクセスして下記が表示されることを確認する

以上で開発環境の構築は完了です。

djangoのアプリ作成

作成するアプリは下記の2つとなります。

  1. todoの一覧を表示するtodolistアプリ
  2. todoの使い方を表示するtodohelpアプリ

<アプリの作成>

ターミナルで下記を実行して「todolist」と「todohelp」のdjangoのアプリを作成します。

(venv)$ python manage.py startapp todolist
(venv)$ python manage.py startapp todohelp

ターミナルで下記を実行して作成したアプリのディレクトリを確認します。

(venv)$ ls -l
total 20
-rw-r--r-- 1 sakura sakura 0 Dec 9 16:00 db.sqlite3
-rwxr-xr-x 1 sakura sakura 672 Dec 9 16:00 manage.py
drwxr-xr-x 3 sakura sakura 4096 Dec 9 16:00 todo_toolproject
drwxr-xr-x 3 sakura sakura 4096 Dec 9 16:06 todohelp
drwxr-xr-x 3 sakura sakura 4096 Dec 9 16:06 todolist
drwxr-xr-x 5 sakura sakura 4096 Dec 9 15:58 venv

プロジェクトの編集

プロジェクト内のファイルで編集が必要になるファイルは下記2つです。

  1. settings.py(プロジェクト全体の構成を管理するファイル)
  2. urls.py(リクエストの内容を解析し、解析した内容でviews.pyに渡す)

プロジェクトのsettings.pyの編集

プロジェクト(todo_todoprojectディレクトリ内)のsettings.pyに以下を追加してプロジェクトに「todolist」と「todohelp」アプリを追加したことを設定します。

settings.pyを編集し、33行目あたりにある「INSTALLED_APPS」の箇所を下記のように更新します

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'todolist.apps.TodolistConfig',
    'todohelp.apps.TodohelpConfig',
]
「’todolist.apps.TodolistConfig’,」と「’todohelp.apps.TodohelpConfig’,」の2行追加します。
「todolist.apps」「todohelp.apps」のあと記載する「.TodolistConfig」の「T」と「C」は大文字にし、「’todolist.apps.TodolistConfig’」「’todohelp.apps.TodohelpConfig’」とします。

プロジェクトのurls.pyの編集

HTTPリクエストオブジェクトのURLパターンに応じたviewの設定を行います。

記載するURLパターンは下記の2つです。

  1. 「http://127.0.0.1:8000/my/list」であった場合、「todolist」のurls.pyにHTTPリクエストオブジェクトを渡す
  2. 「http://127.0.0.1:8000/tool/help」であった場合、「todohelp」のurls.pyにHTTPリクエストオブジェクトを渡す

プロジェクト(todo_todoprojectディレクトリ内)のurls.pyを選択し、最初から記載されている内容は全て削除します。
削除後に下記を記載します。

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('my/', include('todolist.urls')),
    path('tool/', include('todohelp.urls'))
]

todolistアプリの編集

todolistアプリ内のファイルで編集が必要になるファイルは下記2つです。

  1. urls.py(リクエストの内容を解析し、解析した内容でviews.pyに渡す)
  2. views.py(リクエスを受け取り、必要な処理を行ってレスポンスを返す)

todolistのurls.pyの編集

HTTPリクエストオブジェクトのURLが「http://127.0.0.1:8000/my/list」であった場合、todolistのtodolistviewを呼び出す処理を記載します。

todolistディレクトリにurls.pyは自動作成されいません。

Visual Studio Codeのエクスプローラでtodolistを選択し、手動でurls.pyを作成してください。

作成したurls.pyに下記を記載します。

from django.urls import path
from .views import todolistview

urlpatterns = [
    path('list/', todolistview)
]

todolistのviews.pyの編集

todolistviewは「todolistを呼び出しました」のレスポンスを返す処理を記載します。

views.pyに最初から記載されている内容は全て削除してください。

views.pyに下記を記載します。

from django.http import HttpResponse

def todolistview(request):
    return HttpResponse('<h1>todolistを呼び出しました</h1>')

todohelpアプリの編集

todohelpアプリ内のファイルで編集が必要になるファイルは下記2つです。todoアプリと同名のファイルを編集します。

  1. urls.py(リクエストの内容を解析し、解析した内容でviews.pyに渡す)
  2. views.py(リクエスを受け取り、必要な処理を行ってレスポンスを返す)

todohelpのurls.pyの編集

HTTPリクエストオブジェクトのURLが「http://127.0.0.1:8000/tool/help」であった場合、todohelpのtodohelpviewを呼び出す処理を記載します。

todohelpディレクトリにurls.pyは自動作成されいません。

Visual Studio Codeのエクスプローラでtodohelpを選択し、手動でurls.pyを作成してください。

作成したurls.pyに下記を記載します。

from django.urls import path
from .views import todohelpview

urlpatterns = [
    path('help/', todohelpview)
]

todolistのviews.pyの編集

todolistviewは「todolistを呼び出しました」のレスポンスを返す処理を記載します。

views.pyに最初から記載されている内容は全て削除してください。

views.pyに下記を記載します。

from django.http import HttpResponse

def todohelpview(request):
    return HttpResponse('<h1>todohelpを呼び出しました</h1>')

動作の確認

ターミナルで下記コマンドを実行してWebサーバを起動します。

(venv)$ python manage.py runserver

Webブラウザで「http://127.0.0.1:8000/my/list」にアクセスして下記が表示されることを確認します。

Webブラウザで「http://127.0.0.1:8000/tool/help」にアクセスして下記が表示されることを確認します。

以上でプロジェクトとアプリケーションの関係は終了です。

コメント

タイトルとURLをコピーしました