はじめに
前回はdjangoのアプリの作成方法を整理しました。今回は、djangoのアプリで扱うデータの定義する手順を整理しました。
最後まで読み進めることで、アプリで扱うデータの定義する手順と、djangoの管理者ページからデータを登録することができるようになります。
開発環境の構築
開発環境はVisual Studio Codeを使用します。djangoの実行環境はWindows上で動作させたUbuntuで実行します。WindowsにUbuntu環境を構築する手順は下記を参照してください。
プロジェクトのディレクトリの作成からdjangoアプリの作成までを、下記のコマンドで行います。
$ mkdir todo_tool
$ cd todo_tool
$ python3 -m venv venv
$ souce venv/bin/activate
(venv)$ pip install django==4.2.6
(venv)$ django-admin startproject todo_project .
(venv)$ python manage.py startapp todolist
プロジェクトの編集
プロジェクト内のファイルで編集が必要になるファイルは下記2つです。
- settings.py(プロジェクト全体の構成を管理するファイル)
- urls.py(リクエストの内容を解析し、解析した内容でviews.pyに渡す)
プロジェクトのsettings.pyの編集
プロジェクト(todo_todoprojectディレクトリ内)のsettings.pyに以下を追加してプロジェクトに「todolist」アプリを追加したことを設定します。
settings.pyを編集し、33行目あたりにある「INSTALLED_APPS」の箇所に「’todolist.apps.TodolistConfig’,」を追記します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'todolist.apps.TodolistConfig',
]
「’todolist.apps.TodolistConfig’,」を追記します。「todolist.apps」のあと記載する「.TodolistConfig」の「T」と「C」は大文字にし、「’todolist.apps.TodolistConfig’」とします。
プロジェクトのurls.pyの編集
HTTPリクエストオブジェクトのURLパターンに応じたviewの設定を行います。
記載するURLパターンは下記です。
- 「http://127.0.0.1:8000/admin」であった場合、djangoの管理者ページを表示する
プロジェクト作成時のurls.pyには、不要なコメントが記載されています。編集作業は不要なコメントの削除のみとなります。
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
todolistアプリの編集
todolistアプリ内のファイルで編集が必要になるファイルは下記2つです。
- models.py(アプリケーションのデータ構造を定義する)
- admin.py(管理するモデルを登録する)
作成したモデルの確認は、djangoの管理者ページで行います。そのためにadmin.pyを編集します。
models.pyの役割
models.pyはdjangoのORM(Object-Relational Mapping)を使用して、アプリのデータ構造を定義します。このファイルでモデルを定義することによって、djangoはデータベースとのやりとりを抽象化し、データベーステーブル、SQLクエリを直接書くことなくデータを操作できるようになります。
todolistのmodels.pyの編集
まずはシンプルなデータ構造を定義します。todoを登録する際に、登録する内容はtodoの名前とメモとします。
from django.db import models
class TodoListModel(models.Model):
title = models.CharField(max_length=100)
memo = models.TextField()
def __str__(self):
return self.title
<コードの解説>
from django.db import models
djangoが提供するモデル機能をインポートしています。これにより、データベースの操作とクエリを抽象化して行うことができます。
class TodoListModel(models.Model):
TodoListModelという新しいモデルクラスを作成しており、djangoのModelクラスを継承しています。これにより、このクラスはデータベースのテーブルの形や内容を決めることができます。
title = models.CharField(max_length=100)
titleはCharFieldを使用して定義されており、これは制限された長さの文字列をデータベースに格納するためのフィールドです。max_length=100は、このフィールドの最大文字数が100文字であることを指定しています。
memo = models.TextField()
memoはTextFieldを使用して定義されており、これは大量のテキストを格納するのに適しています。CharFieldと異なり、TextFieldは最大長を指定する必要はありません。
def __str__(self):
return self.title
このモデルのインスタンスを文字列に変換するとき(例えばdjango管理サイトでオブジェクトを表示する際)に、どの情報を表示するかを定義します。この場合、titleフィールドの内容を文字列として返します。
todolistのadmin.pyの編集
管理者ページで管理するモデルを登録します。
from django.contrib import admin
from .models import TodoListModel
admin.site.register(TodoListModel)
<コードの解説>
from django.contrib import admin
Djangoのadminモジュールをインポートしています。このモジュールはDjangoの管理サイトの機能を提供し、これによりモデルを管理サイト上で操作できるようにします。
from .models import TodoListModel
djangoアプリのmodels.pyファイルで定義されているTodoListModelクラスをインポートしています。「.(ドット)」は現在のディレクトリのアプリのディレクトリを参照しています。TodoListModelはtodoアイテムを表すdjangoのモデルで、ここで具体的なフィールド(例えばタイトルや内容など)が定義されています。
admin.site.register(TodoListModel)
TodoListModelをdjangoの管理者ページに登録しています。TodoListModelのオブジェクトの追加、編集、削除を管理者ページを通じて行えるようになります。
データベースの構築
models.pyで定義したデータ構造を基にデータベースにテーブルを作成します。
djangoにおけるデータベースの管理や変更を行うためのコマンドとして、makemigrationsとmigrateが用意されています。
makemigrations
makemigrationsコマンドは、モデルの定義(models.py内で設定したクラス)から実際にデータベースのテーブルを作成または変更するための「移行ファイル」を生成します。移行ファイルは、モデルの変更をデータベースに適用するための指令書のようなもので、djangoはこの指令書に従ってデータベーススキーマ(テーブル構造など)を変更します。
migrate
migrateコマンドは、makemigrationsで作成された移行ファイルを使って、実際にデータベースのスキーマを更新します。これにより、モデルの最新の状態とデータベースのスキーマが一致するようになります。migrateコマンドは移行ファイルを一つずつ順番に適用し、テーブルの追加やカラムの変更、インデックスの追加など、必要なすべてのデータベース操作を自動で行います。
データベース構築の流れ
基本的なデータベース構築の流れは以下の通りです。
- models.pyにデータベース構造を定義する。
- makemigrationsで移行ファイルを作成する。
<一般的な実行方法>(venv)$ python manage.py makemigrations (アプリ名)
models.pyで新しく追加または変更された内容で移行ファイルが作成されます。
<今回の実行方法>(venv)$ python manage.py makemigrations todolist
- migrateで移行ファイルをデータベースに適用する。
(venv)$ python manage.py migrate
生成された移行ファイルがデータベースに適用され、models.pyで定義した内容がデータベースに反映されます。
移行ファイル
makemigrationsを実行したときに生成されたmigrationsフォルダ内の0001_initial.pyファイルが作成されます。
djangoによって自動的に作成される移行(migration)ファイルの一つです。0001はこれが最初の移行であることを示し、initialという名前はこれがそのモデルにとって初めての移行であることを意味しています。
models.pyを更新して再度、makemigrationsを実行すると0002_モデル名_更新フィールド名.pyのファイルが作成されます。
管理アカウントの作成
djangoの管理者ページにログインするためのアカウントを作成します。ターミナルで下記コマンドを実行してください。
(venv)$ python manage.py createsuperuser
Username、Email、Passwordの入力を求められます。Emailは未入力でも問題ありません。パスワードが短いあるいは単純な場合は、警告が出ますが検証用なので「y」を選択して先に進んでください。
<参考:コマンドの実行例>
(venv)$ python manage.py createsuperuser
Username (leave blank to use 'sakura'):
Email address:
Password:
Password (again):
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.kn
データベースへのデータ登録
データベースにデータを登録するviewとして、CreateViewがあります。CreateViewについては、まだ説明していないので、ここでは管理者ページからデータを登録する方法を記載しています。
管理者ページにアクセス
下記を実施したあとにdjangoを起動します。
- プロジェクトの編集
- todolistアプリの編集
- データベースの構築
- 管理アカウントの作成
- ターミナルで下記コマンドを実行してdjangoを起動します。
(venv)$ python manage.py runserver
- 「http://127.0.0.1:8000/admin」にWebブラウザでアクセスするとログイン画面が表示されます。
- createsuperuserで作成したアカウントで管理者ページにログインできます。
データの登録
確認用のデータを登録します。
- 「Todo list models」の「+Add」をクリックします。
- 「Add todo list model」のページが表示されるので「Title」と「memo」を入力して「SAVE」をクリックします。
- 下記のように表示されたらデータ登録は完了です。
以上でアプリで扱うデータの定義は終了です。
コメント