Jello's development blog

Jello's development blog

Django 튜토리얼 따라하기 2

Database setup

이제 mysite/settings.py를 열어보자.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

아마 기본값으로 위처럼 설정되어있을 것이다.
ENGINE에는 'django.db.backends.sqlite3', 'django.db.backends.postgresql', 'django.db.backends.mysql', or 'django.db.backends.oracle' 등이 들어갈 수 있다.
NAME은 데이터베이스의 이름을 넣어준다.

migrate에 대하여

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

settings.py내의 이 부분은 Django 프로젝트에 설치할 app의 목록이며, 기본값으로 위처럼 되어있다. 이제 migration을 해보도록 하자.

$ python manage.py migrate

migrate 명령어는 INSTALLED_APPS를 보고, 필요한 데이터베이스를 생성해준다. 나중에, 목록에 다른 항목도 추가할 것이니 봐 두도록 하자.

model 생성, 활성화

이제 polls/models.py에 모델을 생성해보자.

polls/models.py

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Django에서는 데이터베이스를 models.py에 설정해줌으로써 만들어준다. 클래스로 하나의 모델이 만들어지며, 모두 django.db.models.Model을 상속받아야 한다. 모델 내 field는 django.db.models.***Field의 인스턴스로 생성된다.

Question모델(테이블)에는 최대 길이가 200이고, character type으로 채워질 question_text필드가 있고, dateTime type이고 설명이 date published인 pub_date라는 필드가 있다.

Choice모델에는 Question모델을 참조하는 ForeignKey가 있고, 최대 길이가 200이고 character type인 choice_text필드와, 기본값이 0이고 integer type인 votes필드가 있다.

이렇게 추가했으니 이제 데이터베이스에 인식을 시켜보자. 아까 위에서 언급했던 mysite/settings.pyINSTALLED_APPS 리스트에 다음 항목을 추가해보자.

'polls.apps.PollsConfig',

이렇게 하고 아래 명령어를 실행하면 Django는 polls라는 app을 추가한다.

$ python manage.py makemigrations polls

makemigrations라는 명령어를 입력하게 되면, Django에게 모델에게 변화를 주었다고 말하는 것이다. migrate할 파일이 polls/migrations/0001_initial.py에 생성되었을 것이다. 그렇다면 아래 명령어로 migration을 해준다.

python manage.py sqlmigrate polls 0001

이제 아까 사용했던 migrate 명령어로 최종적으로 변경사항을 저장해주면 된다.

python manage.py migrate

다소 복잡한 과정이지만, 여기까지 했다면 이제 polls app의 model이 프로젝트에 완전히 업데이트된 것이다.

Admin 관리

Django는 Admin도 제공하여 이것으로 모델을 관리할 수 있다. 먼저 Admin 계정을 만들어보자.

$ python manage.py createsuperuser

Username: ???
Email address: ???@example.com
Password: **********
Password (again): *********
Superuser created successfully.

자신이 만들고 싶은 정보를 입력하면 계정이 만들어지게 된다. 하지만 아직 polls app을 Admin에서 관리할 수 있도록 설정해주지 않았다. 설정하려면 polls/admin.py에 코드를 추가해주면 된다.

polls/admin.py

from django.contrib import admin

from .models import Question, Choice

admin.site.register([Question, Choice])

이제 서버를 실행하여 Admin으로 들어가보자. Admin 주소는 http://127.0.0.1:8000/admin/일 것이다. 다음 포스트로 가기 전에 미리 Dummy Data를 만들어주도록 하자.