-
part 2-1 모델Django 2022. 6. 29. 15:18
데이터베이스 설치
웹을 만들 때 데이터를 저장하기 위해서는 데이터베이스가 필요합니다.
데이터베이스의 종류는 다양합니다.
실습에서는 경량 데이터베이스인 sqlite3을 사용합니다.
이후 조금 더 성능이 좋은 데이터베이스를 사용하고 싶다면
settings.py에 소스 몇줄만 고치면 데이터베이스 종류를 변경할 수 있습니다.
INSTALLED_APPS는
현재 Django 인스턴스에서 활성화된 모든 Django 어플리케이션들의 이름이 담겨 있습니다.
' ~ ' 이러한 앱들을 사용하겠다라고 장고에 얘기하는것입니다 !
앱을 추가하면
추가로 설치한 앱을 작성해 주어야 사용할 수 있습니다 !
(위 앱들은 일반적인 경우에 사용하기 편리하도록 Django와 함께 딸려오는 기본앱들입니다.)
이러한 기본 어플리케이션들 중 몇몇은 최소한 하나 이상의 데이터베이스 테이블을 사용합니다.
py manage.py migrate를 입력하여 데이터베이스 테이블을 생성해 줍니다.
모델 만들기
우리가 만드는 설문조사(poll) 앱도 데이터저장을 필요로 합니다.
Question은 질문(question)과 발행일(publication date),
Choice는 선택지(choice)와 표(vote)계산을 위한 두개의 필드를 가집니다.지금부터 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 안에는 question_text(질문내용)과 pub_date(생성날짜)가 있고
Choice 안에는 질문(question)과 해당하는 선택지(choice_text)와 votes(투표수)가 있습니다.
question_text의 데이터 타입은 CharField(문자)로 200자까지 가능합니다.
pub_date의 데이터타입은 DateTimeField(날짜와 시간)입니다.
choice_text의 데이터 타입은 CharField(문자)로 200자까지 가능합니다.
votes의 데이터타입은 IntegerField(숫자)이며 기본값은 0입니다
ForeignKey는 Choice안에 question은 위에 생성된 Question을 가리키고 있다는 의미로 이해하면 됩니다.모델의 활성화
우리가 만든 설문조사앱(polls)를 사용하기 위해
settings.py -> INSTALLED_APPS에 추가해줍니다.
이제 다음 명령어를 입력해 주세요!
py manage.py makemigrations polls makemigrations 을 실행시킴으로서,
모델을 변경시킨 사실과(이 경우에는 새로운 모델을 만듬)이 변경사항을 migration으로 저장시키고 싶다는 것을 Django에게 알려줍니다.
migrations라는 장소에 작성해논 모델들을 데이터베이스 내의
테이블을 생성할 수 있도록 설계도를 만드는 작업입니다.0001_initial.py 파일이 생성되고
데이터베이스내의 테이블을 생성하기 위한 설계도가 만들어진것을 확인할 수 있습니다.
py manage.py migrate 명령어를 입력해주면
데이터베이스 내의 실제 테이블을 생성하는 작업을 수행합니다.
API 가지고 놀기
대화식 Python 쉘을 실행하여 Django API를 자유롭게 가지고 놀아봅시다.
py manage.py shell을 입력하여 쉘을 실행해 주세요.
만들어 놓은 models 내의 Choice와 Question을 사용하겠다는 명령어입니다.
현재 Question내의 모든 데이터를 가져오라는 명령어입니다.
현재 등록된 Question이 없기 때문에 빈내용([ ])이 나옵니다.Question내의 데이터를 생성하도록 하겠습니다.
발행일을 나타내기 위해 timezone이라는 라이브러리를 불러옵니다.
입력한 데이터가 잘 나오는것을 확인할 수 있습니다!
Question안의 objects가 1개 있다는 것을 알 수 있습니다.
그런데 objects가 1개 있다는 것을 알 수는 있지만
어떤 데이터인지는 구분되지 않습니다.
모델을 __str__() 메서드를 이용하여 수정하면
원하는 문구를 확인할 수 있습니다!
polls/models.py 파일에서 다음과 같이 수정해 주세요.
from django.db import models
class Question(models.Model):
# ...
def __str__(self):
return self.question_text
class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text개발자가 필요로하는 커스텀 메서드도 추가할 수 있습니다.
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)어제(현재 시간에서 하루 전날의 시간을 차감한 날)
이후에 발행된 데이터를 반환합니다.
변경된 사항을 저장하고, python manage.py shell를 다시 실행해주세요.
(다시 실행했기 때문에 처음과 같이 사용할 모델을 import해 주어야 합니다.)
1이 아닌 'What's new?'라는 텍스트가 나오는 것을 확인할 수 있습니다 !
출처 : django 웹 프로그래밍 강좌 (#2-1 database)(django model, model 사용법, api 사용)
django part 2'Django' 카테고리의 다른 글
Part 4 폼과 기본 뷰 (0) 2022.07.02 Part 3 뷰와 템플릿 (0) 2022.07.01 Part 2-2 관리자 페이지 (0) 2022.06.29 part 1. 요청과 응답 (0) 2022.06.28 django 설치 및 가상환경 세팅하기 (0) 2022.06.27