0
1

More than 3 years have passed since last update.

Progateで作ったWebアプリをDjangoで作ってみる! Part3 -データベース編-

Last updated at Posted at 2021-07-13

ProgateのNode.jsコースではお買い物リストアプリを作るのですが、これと全く同じものをDjangoで作ってみます。

Djangoでのアプリ開発の一連の流れを整理するために記していきます。

目標物
image.png

HTMLとCSS、PNG形式画像は使い回しで、一部をDjango用のタグに変えます。

前回のおさらい

Part1
Part2

Part1では初期設定、Part2ではトップページの表示をしました。

今回はデータベースの設定をしていきます。

models.py

Djangoでデータベースを扱うときに使うファイルはmodels.pyです。models.pyファイルはデータベースを作るための設計図のようなイメージ。

models.pyは、データにどんな名前をつけるか、どんなデータを入れるか、データ型をどうするかという情報を定義付けるためのファイルです。

モデル(データベーステーブル)の名前をclassとして定義します(☆1)。

今回は、買い物アイテムだけなので、item変数を文字列型(CharField)として登録します。文字列の最大長(max_length)を100とします(☆2)。

__str__の特殊メソッドで、itemの文字列データでオブジェクトを表現します。これでどのデータかわかりやすくなります(☆3)。

listapp/list/models.py
from django.db import models

class ListModel(models.Model): # ☆1
   item = models.CharField(max_length=100)  # ☆2

   def __str__(self):
       return self.item # ☆3

models.pyファイルの中身をデータベースに反映させるためにマイグレーションという作業をしていきます。

マイグレーション

models.pyファイルの中身をデータベースに反映させるためにmakemigrationsmigrateというコマンドを実行します。

まずは、makemigrationsです。

makemigrationsは、models.pyファイルで定義した内容をもとにデータベースの設計図のようなファイルを作成するコマンドです。

さっそく、実行してみましょう!

python manage.py makemigrations

すると、以下のような実行結果となりました。Create model ListModelとありますが、これはmigrationというファイルが作成されたということを示しています。実際に、listアプリの中に、migrationsフォルダが作成されています。

実行結果
Migrations for 'list':
  list\migrations\0001_initial.py
    - Create model ListModel

migrateコマンドはmakemigrationsコマンドによって作成されたファイル内容をデータベースに反映させるためのコマンドです。実行してみましょう!

python manage.py migrate

すべて、OKとなっているので、データベースへの反映が完了しました!

実行結果
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, list, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying list.0001_initial... OK
  Applying sessions.0001_initial... OK

admin.py

アプリで作ったデータベーステーブルを、このあと説明する管理画面に表示させるためにadmin.pyというファイルを設定してきます。

admin.pyファイルにモデルを追加することで、管理画面でそのデータベースを認識させることができます。

listapp/list/admin.py
from django.contrib import admin
from .models import ListModel

admin.site.register(ListModel)

管理ツールを使う

Djangoでは管理画面でデータベースを操作することができます。

まずは、管理画面にログインするためのユーザー名とパスワードを登録していきます。以下のコマンドをターミナルで実行!

python manage.py createsuperuser

するとユーザー名、メールアドレス、パスワードの入力が求められます。メールアドレスは入れなくてもいいです。Bypass password validation and create user anyway? [y/N]:と聞かれたらy(yes)を入力、実行しましょう!これでログインすることができます。

Username (leave blank to use 'a'): mi
Email address:   
Password: xxx
Password (again):xxx
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.

python manage.py runserverをターミナルで実行して、「127.0.0.1:8000/admin」にアクセスして管理画面を表示させます。
ログインしましょう!

image.png

ログインすると、作成したデータベース(List models)が反映されていました。「Add」をクリックしましょう。

image.png

そうすると「item」を入れることができるのがわかります。ためしに、とまとを入れて「SAVE」すると、

image.png

データベースにとまとが反映されていました。

image.png

他にも追加していくことができます。

image.png

Part4に続きます!

Part4

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1