[Django] tutorial #2-데이터베이스

정보구니·2021년 11월 24일
0

Django

목록 보기
3/15
post-thumbnail

데이터베이스


장고는 데이터베이스 종류와 상관없이 데이터베이스 작업을 할 수 있도록 도와준다.

만약 다른 데이터베이스를 사용하고 싶다면,
mysite/setting.py파일에 들어가 데이터베이스 세팅내용을 수정해주면 된다.

기본적으로는 SQLite를 사용하도록 구성되어 있다.

- mysite/setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}



apps 확인하기


또한 mysite/setting.py에는 현재 장고프로젝트에서 활성화 되어 있는 앱들의 이름이 저장되어있다.

기본적으로 INSTALLED_APPSDjango와 함께 따라오는 다음 앱들을 포함한다.

  • django.cotrib.admin : 관리용 사이트
  • django.contrib.auth : 인증 시스템
  • django.contrib.contenttypes : 컨텐츠 타입을 위한 프레임워크
  • django.contrib.sessions : 세션 프레임워크
  • django.contrib.messages : 메세징 프레임 워크



데이터베이스 테이블 만들기


다음 기본 앱들 중 몇가지는 최소 하나 이상의 데이터베이스 테이블을 사용하기 때문에
미리 데이터베이스 테이블을 만들어줘야한다.

데이터베이스 테이블을 만들기 위한 다음 명령을 실행한다.
(venv)python manage.py migrate



모델 만들기


모델 : 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)을 말한다.

지금 만들고자 하는 설문조사(poll) 앱에서도 다음 두가지 모델에 대한 데이터 저장을 필요로 한다.

  • Question : 질문
  • Choice : 사용자가 질문에 대한 선택할 수 있는 리스트들

이때 질문(Question)에 대한 데이터는 질문과 발행일을 갖게되고,
선택지(Choice)에 대한 데이터는 선택지와 표계산을 갖게된다.

따라서 Question, Choice에 대한 데이터베이스 모델을 아래 코드를 작성하여 만들어 준다.

- 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)

코드를 해석해보자면,

  • Question, Choice 두가지의 데이터베이스 모델을 가진다.
  • Question 모델은 질문과 발행일의 데이터 타입을 가지며,
  • CharField는 문자타입을 datetime은 시간타입을 나타낸다.
  • Choice 모델은 선택지와 표에 대한 타입을 가지며,
  • Choice모델에서의 질문은 Foreignkey를 통해 Question모델의 질문을 가리킨다.

우선 현재로써는 이정도로 해석해볼 수 있을 거같다...ㅜ


모델의 활성화

(apps)별로 기능이 나눠져 있는데,
이 앱을 등록을 하느냐 안하느냐에 따라서 앱을 사용하겠다 사용하지 않겠다를 명시해줄 수 있다.

즉 장고에서의 앱은 "꼈다뺐다"가 가능한 것이다.


따라서 만들어준 설문조사(poll)앱을 사용하기 위해서는 등록해주어야한다.

- mysite/setting.py

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

6:10

0개의 댓글