2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Djangoでデータベース構築 (初学者がどこまで理解できるか(2))

Last updated at Posted at 2019-10-13

#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 にアクセスします。
ログイン後、画面にaskingansweringフォルダができていればOKです。

<試せる事>
*askingで、質問事項と投稿日を入力・保存できるか。
*askingに対して、answeringで回答が入力・保存できるか。
*askingが削除されると、それに紐づくansweringも削除されるか。

##最後に
管理者サイトからデータベースへのアクセスはできました。
次は、htmlをDjangoに紐付けられるか試してみたいと思います。

2
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?