본문으로 바로가기

안녕하세요. 메타클라우드 입니다. 😎
패스트캠퍼스 챌린지 12일차 블로그 학습 정리 포스팅입니다.

학습 기록

금번 포스팅은 백엔드 실습을 위해 Django에서 데이터베이스를 설치하고 튜토리얼 실습을 추가로 진행합니다. 패스트캠퍼스 12일차 수강 인증샷 입니다.

패스트캠퍼스 챌린지 12일차 - 수강 인증샷

1. 데이터베이스 설치

이전 11일차 포스팅에서 간단한 앱 만들기 실습을 위해 기본적인 서버 실행 및 경로 추가 등을 실습해 보았습니다. 이제 데이터베이스 실습을 위해서 테이블을 미리 만들 필요가 있습니다. 이를 위해, 다음의 명령을 실행해봅시다.

python manage.py migrate

migrate 명령어 실행 결과 화면

이제 polls/models.py 파일을 변경해봅니다. 모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)를 말합니다. 아래 파이썬 코드를 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)

데이터베이스의 각 필드는 Field 클래스의 인스턴스로서 표현되며, CharField 는 문자(character) 필드를 표현하고, DateTimeField 는 날짜와 시간(datetime) 필드를 표현합니다. 이것은 각 필드가 어떤 자료형을 가질 수 있는지를 Django 에게 말해줍니다.

각각의 Field 인스턴스의 이름(question_text 또는 pub_date)은 컴퓨터가 읽기 좋은 형식(machine-friendly format)의 데이터베이스 필드 이름입니다. 이 필드명을 Python 코드에서 사용할 수 있으며, 데이터베이스에서는 컬럼명으로 사용됩니다.

Field 클래스의 생성자에 선택적인 첫번째 위치 인수를 전달하여 사람이 읽기 좋은(human-readable) 이름을 지정할 수도 있습니다. 이 방법은 Django 의 내부를 설명하는 용도로 종종 사용되는데, 이는 마치 문서가 늘어나는 것 같은 효과를 가집니다. 만약 이 선택적인 첫번째 위치 인수를 사용하지 않으면, Django 는 기계가 읽기 좋은 형식의 이름을 사용합니다. 이 예제에서는, Question.pub_date 에 한해서만 사람이 읽기 좋은 형태의 이름을 정의하겠습니다. 그 외의 다른 필드들은, 기계가 읽기 좋은 형태의 이름이라도 사람이 읽기에는 충분합니다.

몇몇 Field 클래스들은 필수 인수가 필요합니다. 예를 들어, CharField 의 경우 max_length 를 입력해 주어야 합니다. 이것은 데이터베이스 스키마에서만 필요한것이 아닌 값을 검증할때도 쓰이는데, 곧 보게 될것입니다. 또한 Field 는 다양한 선택적 인수들을 가질 수 있습니다. 이 예제에서는, default 로 하여금 votes 의 기본값을 0 으로 설정하였습니다.

마지막으로, ForeignKey 를 사용한 관계설정에 대해 설명하겠습니다. 이 예제에서는 각각의 Choice 가 하나의 Question 에 관계된다는 것을 Django 에게 알려줍니다. Django 는 다-대-일(many-to-one), 다-대-다(many-to-many), 일-대-일(one-to-one) 과 같은 모든 일반 데이터베이스의 관계들를 지원합니다.

 

이제 mysite/settings.py 파일에 들어가서 아래 내용으로 바꿔줍니다. 이제 Django 는 polls 앱이 포함된 것입니다.

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

 

아래 makemigrations 명령어를 실행하면 migrations 디렉토리에 새로운 파이썬 코드인 0001_initial.py 파일이 생성됩니다. 개발자는 models.py 파일을 만듬으로 생성된 것입니다. 

python manage.py makemigrations polls

makemigrations 명령어 실행 결과
0001_initial.py 파일 내용

그리고 아래 명령어를 입력하면 db.sqlite3 파일이 생기는데 models.py에서 정의한 데이터베이스가 생성된 것입니다. 예전에는 쿼리문을 날려서 데이터베이스를 생성했지만 Django에서는 코드를 통해 데이터베이스를 만들 수 있습니다.

python manage.py migrate

migrate 명령어

아래 파이썬 쉘을 실행하는 명령어를 통해 데이터베이스를 한번 보도록 하겠습니다. 

python manage.py shell

쉘에서는 아래 명령어를 입력합니다. 이 명령어는 Question 테이블에 데이터가 있는지 조회하는 쉘 명령어인데 아직은 데이터가 없습니다.

# Import the model classes we just wrote.
>>> from polls.models import Choice, Question

# No questions are in the system yet.
>>> Question.objects.all()

Question 에 아직 데이터가 없음

다시 아래 쉘 명령어를 입력하면 Question 테이블에 데이터가 들어갑니다. 그리고 다시 Question.objects.all() 명령어로 조회하면 아래와 같습니다.

>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()

Question 에 데이터가 입력됨

저장한 데이터베이스 값을 조회도 할 수 있습니다.

q 조회 결과

 

여기서 <Question: Question object (1)>로 출력되는건 객체가 어떤건지 바로 알기가 어렵습니다. 그래서 polls/models.py 파일의 Question 모델을 수정하여, __str__() 메소드를 Question과 Choice에 추가하면 해당 object의 내용이 나옵니다.

from django.db import models


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


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

Question object의 내용이 나옴

패스트캠퍼스 챌린지 12일차 포스팅을 여기서 마치며, 다음 포스팅에서는 백엔드 Django 의 admin 기능에 대한 강의를 듣고 실습내용을 정리하겠습니다.


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3FVdhDa

 

수강료 100% 환급 챌린지 | 패스트캠퍼스

딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

fastcampus.co.kr