#Djangoでデータベースを立ててみよう
DjangoでHello world (初学者がどこまで理解できるか(1)) の続きです。
作りたいものは、任意入力のアンケートです。
(例)質問:あなたは何歳ですか
(例)回答:3歳です
##データベースの選定
#### practice/config/settings.py (何も変更は加えません)
*****
#参考までに、デフォルトで設定されているデータベースがこちら
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
*****
データベースは、デフォルトでSQLiteが選定されています。
SQLite
:サーバー側での管理が不要なデータベース。password設定が不可なデメリットも。
MySQLや、PostgresSQLも使用可能。(ENGINE:を書き換えるで実現できる)
##データベースのテーブル作成
#### practice/
$ python manage.py migrate
Djangoの設定ファイルに記載された、アプリケーション毎のデータベーステーブルを作成する。
#### practice/config/settings.py (何も変更は加えません)
*****
#参考までに、デフォルトでインストールされているアプリケーションがこちら
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
*****
##アプリケーションとデータベースの接続口を作成
#### practice/myapplication/models.py
from django.db import models
#質問用のデータに関するクラス
class Asking(models.Model):
asking_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.asking_text
#回答用のデータに関するクラス
class Answering(models.Model):
asking = models.ForeignKey(Asking, on_delete=models.CASCADE)
answering_text = models.CharField(max_length=200)
def __str__(self):
return self.answering_text
***Field
:models.Modelクラスには、文字列(Char)、数値(Integer)、時間(DateTime)などのデータを格納するフィールドがそれぞれあります。
ForeignKey
:第一引数に指定したクラスを継承します。
on_delete
:継承クラスが削除された際の挙動を指定します。
CASCADE
:一緒に消す、PROTECT
:残す
##アプリケーションをDjango環境に認識させる
#### practice/config/settings.py
****
INSTALLED_APPS = [
#先頭行を追加し、アプリケーションを認識させる。
#(フォルダ名).apps.(apps.py内のクラス名)
'myapplication.apps.MyapplicationConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
****
#### practice/
$ python manage.py makemigrations myapplication
これでアプリケーションをDjango環境が認識しました。
なお、makemigrations
コマンドはmodels.pyのクラス自体が変更した場合に、データベースを更新するために行います。
#### practice/
$ python manage.py migrate
更新されたデータベースで、テーブルを作成します。
##管理者サイトからデータをみてみましょう
#### practice/myapplication/admin.py
from django.contrib import admin
from .models import Asking, Answering
#model.pyから、AskingとAnswerigクラスをひっぱり、管理者サイトに登録
admin.site.register(Asking)
admin.site.register(Answering)
#### practice/config/settings.py
#言語コードとタイムゾーンを日本に変更
****
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
****
#### practice/
#adminサイトにログインできるユーザーを作成
$ python manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password: **********
Password (again): *********
これで、管理者サイトに(admin)ユーザーで、ログインできる状態になりました。
#### practice/
$ python manage.py runserver
開発用サーバーを起動し、http://127.0.0.1:8000/admin
にアクセスします。
ログイン後、画面にasking
とanswering
フォルダができていればOKです。
<試せる事>
*askingで、質問事項と投稿日を入力・保存できるか。
*askingに対して、answeringで回答が入力・保存できるか。
*askingが削除されると、それに紐づくansweringも削除されるか。
##最後に
管理者サイトからデータベースへのアクセスはできました。
次は、htmlをDjangoに紐付けられるか試してみたいと思います。