카이로스의 시간

[Django] 설문조사 앱 작성 Part3 본문

카테고리 없음

[Django] 설문조사 앱 작성 Part3

차녕 2022. 3. 23. 19:51

이전part에서는 polls 앱을 생성하고, polls앱의 url을 연결해서 mysite에 등록했습니다.

이렇게 등록된 url은 서버 프로젝트에서 특정 앱이 있으면, client 입력에 따라서 파싱을 해주고, 파싱된 path에 따라서 app으로 분기해주는 것이 핵심입니다.

 

이번에는 DB설정을 해보도록 하겠습니다.

우선 DB 종류는 다양합니다. Oracle, Mysql 처럼 RDBMS가 있고, 관계형이 아닌 NoSQL인 mongoDB 등이 있습니다.

우선 실습에서는 경량 데이터베이스인 SQLite를 사용합니다. 이후 데이터 베이스 수정은 settings.py를 수정하면 됩니다.

Django는 database 종류와 상관없이 작업을 진행하도록 도와줍니다.

 

참고로, mysite/settings.py를 보면 DB를 지정할 수 있도록 변수가 있습니다.

 

Django는 아래 migrate 명령으로 위의 설정을 살펴보고, mysite/settings.py의 INSTALLED_APPS 설정과 앱과 함께 제공되는 DB migration에 따라서 필요한 DB테이블을 생성합니다.

python manage.py migrate

이제 DB 테이블을 만들기 위해서, model을 생성하도록 하겠습니다. 참고로, model은 데이터베이스의 레이아웃 입니다.

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)

여기서 구조를 보면, Choice에 대한 data type에서 models.ForeignKey()를 쓰는데 이 ForeignKey(외래키)는 지정한 데이터 모델을 참조하겠다는 의미입니다. 예를 들어서, 위 처럼 코드를 짜면, question 변수가 Question 모델을 참조하도록 합니다. 또, on_delete CASCADE 설정을 넣어서 Question 모델 설정이 삭제되면 이 Choice안에 question 변수도 삭제되도록 할 수 있습니다. 이런 방향으로 DB를 구성하는게 관계형 DB의 핵심이라고 볼 수 있습니다. 테이블의 행 간에 참조 관계를 지정하는 것입니다. 참고로 Django는 다대일, 다대다, 일대일과 같은 모든 공통 데이터베이스 관계를 지원합니다

 

이제 모델을 활성화 합니다.

우선 그전에, mysite/settings.py에 INSTALLED_APPS 부분에 PollsConfig를 추가합니다.

이렇게 해서 polls 앱이 설치되었음을 Django에 알립니다.

이제 makemigrations를 해보겠습니다.

이렇게 하면, Django에 모델을 일부 변경했고(Question, Choice 추가), 변경사항을 마이그레이션으로 저장되기를 원한다고 알려줄 수 있습니다.

마이그레이션은 Django가 모델에 대한 변경 사항을 변경하는 방법입니다.

이제 마지막으로 생성한 마이그레이션을 적용합니다.

이렇게 해서 생성한 모델 활성화가 완료되었습니다.