Django 初期設定とmodelの作成

初めに

今回から実際に本のタイトルと概要、カテゴリを整理する”本棚アプリケーション”を作成します。それに伴い、初期設定とデータベースのためのモデルを作成します。
これに対して行った具体的な手順をまとめます。

概要

  • 仮想環境の構築とDjangoのインストール
  • プロジェクトのアプリとベースの作成
  • models.pyの作成
  • データベースへの反映
  • 管理画面でユーザテーブルを確認

仮想環境の構築とDjangoのインストール

まず、以下のコマンドを用いてプロジェクトファイルの作成と仮想環境の構築を行いました。

$ mkdir project3
$ cd project3
$ python3 -m venv .env
$ source .env/bin/activate

続いて、以下のコマンドよりDjangoをインストールします。

$ pip install django==3.2

プロジェクトのアプリとベースの作成

初めに、以下のコマンドよりプロジェクトとアプリケーションを作成しました。
また、プロジェクト名は"bookproject"、アプリケーション名は"book"としました。

$ django-admin startproject bookproject
$ cd bookproject
$ python3 manage.py startapp book

次にプロジェクトのurls.pyからアプリケーションのurls.pyを呼び出すためにプロジェクトのurls.pyを以下のようにしました。

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('book.urls'))
]

続いて、setting.pyに以下のコードを追加して、プロジェクトとアプリケーションの紐づけを行いました。

# 一部省略
# Application definition

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

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 = 'bookproject.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        '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',
            ],
        },
    },
]

次に、以下のコマンドよりbookディレクトリ内にもurls.pyを作成しました。

$ touch urls.py

最後に作成したurls.pyに以下のコードを追加しました。

urlpatterns = []

models.pyの作成

ここからはデータベースを構築するためのmodels.pyを作成していきます。
今回はテーブル"Book"と"title"、"text"、"category"の3つのデータを作成しました。作成したmodels.pyは以下のようになりました。

from django.db import models

CATEGORY = (('business', 'ビジネス'), ('life', '生活'), ('other', 'その他'))

class Book(models.Model):
  title = models.CharField(max_length=100)
  text = models.TextField()
  category = models.CharField(
    max_length=100,
    choices = CATEGORY
  )

データベースへの反映

作成したmodels.pyをもとにデータベースを構築しました。構築には以下のコマンドを使用しました。

$ python3 manage.py makemigrations

コマンドの実行に成功するとターミナルに以下のように出力されます。

上の画像より、modelが正常に生成されていることがわかります。また、実験で作成したSampleModelが削除されていることも確認することができました。

続いて、以下のコマンドよりデータベースに反映させました。

$ python3 manage.py migrate

このコマンドによりターミナルに以下に出力されました。

上の画像より、正常にデータベースに反映されたことを確認することができました。

ここで、作成したデータベースを管理画面より確認しました。
まず、以下のコマンドよりサーバーを起動しました。

$ python3 manage.py runserver

次にurlより管理画面にアクセスし、データベースを確認しました。
以下の画像は管理画面の様子です。

また、管理画面より2つのデータを入力しました。

上記の画像より2つのデータがあることは確認できますが、どのようなデータかを確認することができません。よって、models.pyに以下のようにコードを追加しました。

from django.db import models

CATEGORY = (('business', 'ビジネス'), ('life', '生活'), ('other', 'その他'))

class Book(models.Model):
  title = models.CharField(max_length=100)
  text = models.TextField()
  category = models.CharField(
    max_length=100,
    choices = CATEGORY
  )

  def __str__(self):
    return self.title

変更後の管理画面は以下のようになりました。

上の画像より、変更によりタイトルを確認することができるようになりました。