본문 바로가기

연습

장고걸스 튜토리얼 (Django Girls Tutorial) 따라하기 4 - 장고 모델 (블로그 내 모든 포스트 저장)

 * 참고 가능한 다른 링크 

 가상환경실행 

 myvenv\Scripts\activate 

애플리케이션 만들기

프로젝트 내부에 별도의 애플리케이션 만들기

애플리케이션 생성 후 장고에 사용해야 한다고 알려주기

mysite/settings.py 파일 열어 코드 수정

블로그 글 모델 만들기

blog/models.py 열어 모든 내용 삭제 후 코드 추가

# str양 옆에 언더스코어(_) 를 두 개씩 넣었는지 다시 확인하세요.

# 파이썬에서 자주 사용되는데, "던더(dunder; 더블-언더스코어의 준말)"라고도 불려요

 

 

from django.conf import settings
from django.db import models
from django.utils import timezone


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

 

from 또는 import로 시작하는 부분은 다른 파일에 있는 것을 추가하라는 뜻입니다. 다시 말해, 매번 다른 파일에 있는 것을 복사&붙여넣기로 해야 하는 작업을 from이 대신 불러와 주는 거죠.

class Post(models.Model):는 모델을 정의하는 코드입니다. (모델은 객체(object)라고 했죠?)

  • class는 특별한 키워드로, 객체를 정의한다는 것을 알려줍니다.
  • Post는 모델의 이름입니다. (특수문자와 공백 제외한다면) 다른 이름을 붙일 수도 있습니다. 항상 클래스 이름의 첫 글자는 대문자로 써야 합니다.
  • models은 Post가 장고 모델임을 의미합니다. 이 코드 때문에 장고는 Post가 데이터베이스에 저장되어야 한다고 알게 됩니다.

이제 속성을 정의하는 것에 대해서 이야기해 볼게요. title, text, created_date, published_date, author에 대해서 말할 거에요. 속성을 정의하기 위해, 필드마다 어떤 종류의 데이터 타입을 가지는지를 정해야 해요. 여기서 데이터 타입에는 텍스트, 숫자, 날짜, 사용자 같은 다른 객체 참조 등이 있습니다.

  • models.CharField - 글자 수가 제한된 텍스트를 정의할 때 사용합니다. 글 제목같이 짧은 문자열 정보를 저장할 때 사용합니다.
  • models.TextField - 글자 수에 제한이 없는 긴 텍스트를 위한 속성입니다. 블로그 콘텐츠를 담기 좋겠죠?
  • models.DateTimeField - 날짜와 시간을 의미합니다.
  • models.ForeignKey - 다른 모델에 대한 링크를 의미합니다.

시간 관계상 모든 코드를 하나하나 다 설명하지는 않을 거예요. 대신 모델의 필드와 정의하는 방법에 궁금하다면 장고 공식 문서를 꼭 읽어보길 바랍니다. : https://docs.djangoproject.com/en/2.0/ref/models/fields/#field-types)

DB에 모델을 위한 테이블 만들기

데이터베이스에 우리의 새 모델, Post 모델을 추가

 

장고는 데이터베이스에 지금 반영할 수 있도록 마이그레이션 파일(migration file)이라는 것을 준비해둠

실제 DB에 모델 추가하기