この記事はDjangoを用いてwebアプリを作成する際にプロジェクトのローカル上にデータベースを構築する方法について説明するものである.
前提条件
Djandoプロジェクトが作成されていて,python manage.py runserver
によって以下の画面が表示されていることを前提とする.
できていない場合は以下いずれかの記事を参照すること.
DockerでDjango環境構築
https://qiita.com/tarakokko3233/items/39e91cd39a12d1507b06
仮想環境でDjando環境構築
https://qiita.com/tarakokko3233/items/46c567fb32a26a69269a
今回はrunserverをした後にプロジェクトのルートディレクトリに生成されるdb.sqlite3
を用いてデータベースを構築する.このファイルの中に生成したテーブルやデータが格納される.db.sqlite3
を直接開くことはできないのでデータベース管理用のソフトウェアで開く必要がある.
1.データベースの構築設定(モデル,ビュー,エンドポイント)
今回は例としてusersテーブルにname属性とemail属性を設定する.
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を指定する.
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'
ビューにアクセスするためのエンドポイントを指定する.
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に記述する.
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を作成する.
ここでは簡単にデータを表示するテンプレートを作成する.
<!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
ソフトウェアを開いたら上部に+ボタンがあるので押したら以下の画面になる.
SQLiteを選択し,Database Path
にdb.sqlite3
のパスを入力し,Connectを選択する.
Name
はなんでもいい
するとusersテーブルが作成されていることがわかるので選択すると設定したid,name,email属性がテーブル内にあることがわかる.(Djangoは主キーとして勝手にid属性が設定される)
テーブル名はmodels.pyで作成した名前である..
テーブル内でダブルクリックをしてテーブルにデータを追加する.追加した際にctrl+S(macはcmd+S)で保存する
保存は忘れないこと!!!
データを編集,削除する際はデータを右クリック(macは左クリックまたはctl+右クリック)して編集,削除することができる.編集,削除時も保存は忘れないこと!!!
4.実行
Dockerで環境構築した場合
$ docker-compose up
でコンテナを立ち上げるかDockerDesktopで対象のコンテナの実行ボタンを押す.
実行した後
http://0.0.0.0:8000
にアクセスしたら以下の画面が表示されていると完成である.
仮想環境で構築した場合
仮想環境をアクティベートしていることを確認して,以下のコマンドを実行する.
$ python manage.py runserver
実行した後
http://127.0.0.1:8000
にアクセスしたら以下の画面が表示されていると完成である.