5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Djangoプロジェクトのローカル上にデータベースを構築する

Last updated at Posted at 2024-04-19

この記事はDjangoを用いてwebアプリを作成する際にプロジェクトのローカル上にデータベースを構築する方法について説明するものである.

前提条件

Djandoプロジェクトが作成されていて,python manage.py runserverによって以下の画面が表示されていることを前提とする.
スクリーンショット 2024-04-16 23.39.01.png
できていない場合は以下いずれかの記事を参照すること.
DockerでDjango環境構築
https://qiita.com/tarakokko3233/items/39e91cd39a12d1507b06
仮想環境でDjando環境構築
https://qiita.com/tarakokko3233/items/46c567fb32a26a69269a

今回はrunserverをした後にプロジェクトのルートディレクトリに生成されるdb.sqlite3を用いてデータベースを構築する.このファイルの中に生成したテーブルやデータが格納される.db.sqlite3を直接開くことはできないのでデータベース管理用のソフトウェアで開く必要がある.

1.データベースの構築設定(モデル,ビュー,エンドポイント)

今回は例としてusersテーブルにname属性とemail属性を設定する.

models.py
from django.db import models

class Users(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

    def __str__(self):
        return self.name

models.pyを変更したらデータベースに適用させるために以下のいずれかのコマンドを実行する.

Dockerを用いて環境構築した場合

$ docker-compose run web python manage.py makemigrations
$ docker-compose run web python manage.py migrate

仮想環境上で環境構築した場合
仮想環境をアクティベートする
Mac用

$ source venv/bin/activate

Windows用

$ venv\Scripts\activate

仮想環境をアクティベートした状態で以下のコマンドを実行する.

$ python manage.py makemigrations
$ python manage.py migrate

次にビューとエンドポイントを設定する.
使用するusersモデルと表示するhtmlを指定する.

views.py
from django.shortcuts import render
from django.views import generic
from yourappname.models import Users

class UserListView(generic.ListView):
    model = Users
    template_name = 'user_list.html'
    context_object_name = 'users'

ビューにアクセスするためのエンドポイントを指定する.

urls.py
from django.contrib import admin
from django.urls import path
from yourappname.views import UserListView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', UserListView.as_view(), name='user'), #ルートにアクセスしたらuser_list.htmlにアクセスする
]

2.テーブルのデータ表示用のテンプレートを表示

yourappnameディレクトリにtemplatesディレクトリを作成する.
templatesディレクトリを認識するために以下の設定をsetting.pyに記述する.

setting.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(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',
            ],
        },
    },
]

templatesディレクトリにuser_list.htmlを作成する.
ここでは簡単にデータを表示するテンプレートを作成する.

user_list.html
<!DOCTYPE html>
<html>
<head>
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <ul>
        {% for user in users %}
            <li>{{ user.name }} - {{ user.email }}</li>
        {% endfor %}
    </ul>
</body>
</html>

3.GUIソフトでテーブルにデータを追加,編集,削除

任意のデータベースGUIソフトウェアをインストールする.今回はTablePlusを使用する.
https://tableplus.com

ソフトウェアを開いたら上部に+ボタンがあるので押したら以下の画面になる.
スクリーンショット 2024-04-19 12.26.33.png
SQLiteを選択し,Database Pathdb.sqlite3のパスを入力し,Connectを選択する.

Nameはなんでもいい

スクリーンショット 2024-04-19 16.18.13.png

するとusersテーブルが作成されていることがわかるので選択すると設定したid,name,email属性がテーブル内にあることがわかる.(Djangoは主キーとして勝手にid属性が設定される)

テーブル名はmodels.pyで作成した名前である..

スクリーンショット 2024-04-19 16.19.15.png

テーブル内でダブルクリックをしてテーブルにデータを追加する.追加した際にctrl+S(macはcmd+S)で保存する

保存は忘れないこと!!!

スクリーンショット 2024-04-19 16.20.37.png

データを編集,削除する際はデータを右クリック(macは左クリックまたはctl+右クリック)して編集,削除することができる.編集,削除時も保存は忘れないこと!!!

4.実行

Dockerで環境構築した場合

$ docker-compose up

でコンテナを立ち上げるかDockerDesktopで対象のコンテナの実行ボタンを押す.
実行した後
http://0.0.0.0:8000
にアクセスしたら以下の画面が表示されていると完成である.

仮想環境で構築した場合
仮想環境をアクティベートしていることを確認して,以下のコマンドを実行する.

$ python manage.py runserver

実行した後
http://127.0.0.1:8000
にアクセスしたら以下の画面が表示されていると完成である.

スクリーンショット 2024-04-19 16.37.58.png

5
4
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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?