안녕하세요. 메타클라우드 입니다. 😎
패스트캠퍼스 챌린지 12일차 블로그 학습 정리 포스팅입니다.
학습 기록
금번 포스팅은 백엔드 실습을 위해 Django에서 데이터베이스를 설치하고 튜토리얼 실습을 추가로 진행합니다. 패스트캠퍼스 12일차 수강 인증샷 입니다.
1. 데이터베이스 설치
이전 11일차 포스팅에서 간단한 앱 만들기 실습을 위해 기본적인 서버 실행 및 경로 추가 등을 실습해 보았습니다. 이제 데이터베이스 실습을 위해서 테이블을 미리 만들 필요가 있습니다. 이를 위해, 다음의 명령을 실행해봅시다.
python manage.py 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
그리고 아래 명령어를 입력하면 db.sqlite3 파일이 생기는데 models.py에서 정의한 데이터베이스가 생성된 것입니다. 예전에는 쿼리문을 날려서 데이터베이스를 생성했지만 Django에서는 코드를 통해 데이터베이스를 만들 수 있습니다.
python manage.py 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.objects.all() 명령어로 조회하면 아래와 같습니다.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
저장한 데이터베이스 값을 조회도 할 수 있습니다.
여기서 <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
패스트캠퍼스 챌린지 12일차 포스팅을 여기서 마치며, 다음 포스팅에서는 백엔드 Django 의 admin 기능에 대한 강의를 듣고 실습내용을 정리하겠습니다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
수강료 100% 환급 챌린지 | 패스트캠퍼스
딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!
fastcampus.co.kr
'DevOps > Fast Campus' 카테고리의 다른 글
[패스트캠퍼스 챌린지 14일차] - 백엔드 Django 기초 2 (0) | 2021.11.14 |
---|---|
[패스트캠퍼스 챌린지 13일차] - 백엔드 Django 기초 1 (0) | 2021.11.13 |
[패스트캠퍼스 챌린지 11일차] - 백엔드 Django 3 (0) | 2021.11.11 |
[패스트캠퍼스 챌린지 10일차] - 백엔드 Django 2 (0) | 2021.11.10 |
[패스트캠퍼스 챌린지 09일차] - 백엔드 Django 1 (0) | 2021.11.09 |