djangoで作るTodo管理アプリ②(ファイルの説明とシンプルなWebサイトの表示)

django

はじめに

今回は下記について整理しました。

  • djangoで使用するファイルの説明
  • djangoでシンプルなWebサイトの表示

djangoの実行環境は構築済みの前提で記載しています。
構築手順については前回を参照してください。

djangoで使用するファイルの説明

djangoでプロジェクトを作成すると、プロジェクトの実行に必要なファイルが自動で作成されます。ここでは、自動で作成されるファイルについて説明します。

djangoでプロジェクト作成時に作成されるファイル・ディレクトリ

プロジェクトを作成する前のファイル・ディレクトリは、Pythonの仮想環境「venv」ディレクトリのみが存在しているだけとなります。

(venv)$ ls -l
total 4
drwxr-xr-x 5 sakura sakura 4096 Nov 8 07:20 venv

プロジェクトを作成するコマンドを実行します。

(venv)$ django-admin startproject todoproject .

プロジェクトを作成した後のファイル・フォルダは、下記となります。

(venv)$ ls -l
-rwxr-xr-x 1 sakura sakura 668 Nov 8 07:30 manage.py
drwxr-xr-x 2 sakura sakura 4096 Nov 8 07:30 todoproject
drwxr-xr-x 4 sakura sakura 4096 Nov 8 07:20 venv

Webサーバを起動すると、追加で自動作成されるファイル・ディレクトリがあるのでWebサーバも起動します。

(venv)$ python3 manage.py runserver

Webサーバを実行した後のファイル・ディレクトリは、下記となります。
「db.sqlite3」が追加されます。

(venv)$ ls -l
-rw-r--r-- 1 sakura sakura 0 Nov 8 07:34 db.sqlite3
-rwxr-xr-x 1 sakura sakura 668 Nov 8 07:30 manage.py
drwxr-xr-x 3 sakura sakura 4096 Nov 8 07:34 todoproject
drwxr-xr-x 4 sakura sakura 4096 Nov 8 07:20 venv

「todoproject」 ディレクトリ内のファイル・ディレクトリは、下記となります。

(venv)$ ls -l todoproject/
-rw-r--r-- 1 sakura sakura 0 Nov 8 07:30 __init__.py
drwxr-xr-x 2 sakura sakura 4096 Nov 8 07:34 __pycache__
-rw-r--r-- 1 sakura sakura 399 Nov 8 07:30 asgi.py
-rw-r--r-- 1 sakura sakura 3255 Nov 8 07:30 settings.py
-rw-r--r-- 1 sakura sakura 753 Nov 8 07:30 urls.py
-rw-r--r-- 1 sakura sakura 399 Nov 8 07:30 wsgi.py

自動作成されるファイル・ディレクトの概要

manage.py 入門では編集しない。
コマンドラインユーティリティを提供する。開発サーバーの起動、データベースのマイグレーション、プロジェクトの作成、テストの実行など、さまざまなDjangoコマンドを実行できる。
db.sqlite3 djangoのデフォルトデータベース。
runserverを実行すると、このSQLiteデータベースが自動的に作成される。
todoproject プロジェクトのディレクトリ。
startprojectを実行すると、作成されるディレクトリ。
__init__.py 入門では編集しない。
pythonを扱うディレクトリであることを示す。
__pycache__ Pythonがプログラムを高速に実行するために使用するキャッシュファイルを格納するディレクトリ。
asgi.py 入門では編集しない。
asgiはAsynchronous Server Gateway Interfaceの略語。ASGIは、djangoアプリケーションが非同期プロトコル(例えばWebSocket)をサポートし、非同期処理(例えば非同期HTTPリクエストのハンドリング)を可能にするための仕様。ASGI対応のWebサーバーで実行するために必要な設定を行う。
settings.py 入門では編集する。
データベースの設定、インストールされているアプリケーション、ミドルウェア、テンプレートの設定、静的ファイルのパス、セキュリティ設定など、プロジェクト全体の構成をこのファイルで管理する。
urls.py 入門では編集する。
WebサーバからHTTPリクエストオブジェクトの内容を解析し、解析した内容でviews.pyにHTTPリクエストオブジェクトを渡す。
wsgi.py 入門では編集しない。
wsgiはWeb Server Gateway Interfaceの略語。WSGIは、PythonアプリケーションとWebサーバー間の標準的なインターフェースであり、アプリケーションがWebサーバー上で実行されるためのエントリポイントを提供する。

settings.pyの中身の説明

settings.pyの中身について、大まかな解説をまとめました。
urls.pyについては、別で解説します。


DEBUG=True

Trueにすることで、エラー発生時に詳細を表示します。ただし、本番環境ではユーザに不要な情報を提供してしまうことになるので、Falseにします。


ALLOWED_HOSTS = []

djangoアプリケーションがサービスを提供するホスト名(またはIPアドレス)のリストです。このリストに含まれているホストからのリクエストのみが処理され、それ以外のホストからのリクエストは拒否されます。これはセキュリティ機能の一つで、HTTPヘッダーのHost部分を検証して、設定されたホスト名以外からの不正なリクエストを防ぐために使用される。開発環境では[‘localhost’, ‘127.0.0.1’]のように設定し、本番環境では実際のドメイン名やIPアドレスを設定します。


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

djangoプロジェクトにインストールされているアプリケーションのリストを定義する設定です。
djangoプロジェクトで使用する全てのアプリケーションを含める必要があり、Djangoはこのリストを使って、データベースのマイグレーション、テストの実行、管理サイトへのアプリケーションの登録などのプロセスを管理します。


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',
]

リクエスト/レスポンス処理の際に通過するミドルウェアのリストを定義する設定です。
ミドルウェアは、リクエストがビュー関数あるいクラスに到達する前後や、ビュー関数あるいクラスからのレスポンスがクライアントに返される前後で、様々な処理を行うためのフックです。例えばセッション管理(SessionMiddleware)、CSRF保護(CsrfViewMiddleware)、認証(AuthenticationMiddleware)など、djangoが提供する多くの機能はミドルウェアを通じて実装されています。ミドルウェアはリストに記載された順番に処理され、それぞれがリクエストオブジェクトやレスポンスオブジェクトを受け取り、必要に応じて操作を行います。


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

djangoテンプレートエンジンの動作を定義します。
この設定にはテンプレートをロードするためのディレクトリ、使用するテンプレートエンジン、コンテキストプロセッサのリスト、テンプレートに渡されるオプションなどが含まれる。djangoのテンプレートシステムは、データをHTMLに動的に挿入するための機能を提供し、TEMPLATES設定を通じてその挙動をカスタマイズすることができる。DIRSオプションで、テンプレートファイルが格納されているディレクトリのパスを設定します。

コンテキストプロセッサについて
djangoテンプレートに自動的に渡されるコンテキスト変数を定義します。これにより、ある変数をテンプレートのすべて、または特定のテンプレートに対してグローバルにアクセスできるようになります。例えば、ログインしているユーザー情報や、サイトの設定情報など、複数のテンプレートで共通して使いたいデータをコンテキストプロセッサを通じて提供することができます。コンテキストプロセッサはTEMPLATES設定内のOPTIONSのcontext_processorsで指定できます。


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

djangoプロジェクトで使用するデータベースの設定です。
データベース名、ユーザー名、パスワード、ホスト、ポートなどの接続に必要な情報が含まれている。デフォルトでSQLiteを使用する設定になっていますが、必要に応じて他のデータベースに設定を変更することができます。


AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

ユーザーのパスワードの複雑さを検証するためのルールのリストを定義です。
パスワードが特定の基準を満たしていることを確認するために使用され、セキュリティを強化するのに役立ちます。パスワードに最低限必要な文字数を設定したり、数字や特殊文字が含まれているかをチェックしたり、一般的なパスワードやユーザー情報と似ていないかを検証するバリデーターを設定できます。

djangoでシンプルなWebサイトの表示

まずは、djangoでシンプルなWebサイトを表示してみます。

表示するWebサイト

表示するWebサイトのURLと表示する内容は下記とします。

URL http://127.0.0.1/todolist
表示内容

djangoの動作概要

シンプルなWebサイトを表示する際のdjangoの基本的な動作を下記にまとめました。

  1. ユーザが、ブラウザからWebページにアクセスする
  2. Webサーバが、urls.pyにhttpリクエストオブジェクトを転送する
  3. urls.pyはHTTPリクエストオブジェクトのURLとurlpatternsを比較する
    urls.pyはurlpatterns内で合致したviewを呼び出す
    ※viewはviews.pyで定義する
  4. views(views.py)はhttpレスポンスオブジェクトをWebサーバに返す

編集するファイル

シンプルなWebサイトを表示するために編集が必要なファイルは下記の2つになります。

  1. urls.py
  2. views.py

views.pyは自動作成されません。手動で作成する必要があります。

urls.pyの編集

Webサーバから受け取ったHTTPリクエストオブジェクトを適切なビュー関数やクラスにルーティングするためのルールを定義します。

urlpatternsリストを使用してURLパターンを指定し、URLが呼び出すべきビューと関連付けられます。開発者はこのファイルを編集して、アプリケーション固有のURLパターンを追加できる。

from django.urls import path
from .views import todolistfunc

urlpatterns = [
    path('todolist/', todolistfunc),
]
  • URLが「http://127.0.0.1/todolist/」の場合、ディレクトリ名は「todolist/」となり、「urlpatterns」内の合致したviewは「todolistfunc」となる
  • 「todolistfunc」がviews.pyで定義されていることを下記で定義する
    from .views import todolistfunc

views.pyの編集

views.pyは自動作成されません。手動で作成する必要があります。urls.pyと同じディレクトリにviews.pyを作成してください。

urls.pyから適切なデータを受領して、テンプレートをレンダリングしてブラウザに応答を返す役割を果たします。viewはPythonの関数またはクラスで記述され、URLパターンとviewを関連付けるためのルートファイル(urls.py)で指定されます。

「todolist」はurls.pyから呼び出され、任意の処理を実施したのちにHTTPレスポンスオブジェクトを返します。

from django.http import HttpResponse

def todolistfunc(request):
    response_object = HttpResponse('This is TodoList')
    return response_object
  • 「todolistfunc」関数の引数にはurls.pyからHTTPリクエストオブジェクトを受け取るために、「request」引数を設定する。「request」は任意で構わない。
  • HTTPレスポンスオブジェクトを作成するために下記をインポートする。
    from django.http import HttpResponse
  • 下記でHTTPレスポンスオブジェクトを作成する
    response_object = HttpResponse('This is TodoList')

djangoの起動

下記のコマンドを実行してdjangoを起動します。

(venv)$ python3 manage.py runserver

Webブラウザで「todolist」にアクセス

Webブラウザで「http://127.0.0.1/todolist/」に接続すると、下記が表示されるはずです。

以上でdjangoでシンプルなWebサイトの表示は完了です。

コメント

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