장고 걸즈 튜토리얼 따라하기 3 - 장고 model
객체(Object)
프로그래밍 개발 방법 중에는 객체 지향 프로그래밍(object oriented programming)이라 부르는 개념이 있다. 프로그램이 어떻게 작동해야 하는지 모든 것을 하나하나 지시하는 것 대신, 모델을 만들어 그 모델이 어떤 역할을 가지고 어떻게 행동해야 하는지 정의하여 서로 알아서 상호작용할 수 있도록 만드는 것이다.
객체 지향 설계를 할 때에 한 객체의 속성은 객체 속성(properties)
, 행위는 메서드(methods)
로 구현된다.
블로그 글을 모델로 만들게 되면
xxxxxxxxxx
Post(게시글)
--------
title(제목)
text(내용)
author(글쓴이)
created_date(작성일)
published_date(게시일)
등의 속성들을 가지게 될것이다.
그리고 글을 출판하기 위한 메서드로 publish
메서드도 만들것이다.
장고 모델
장고에서 모델을 저장하게 되면 그 내용에 데이터베이스
에 저장된다. 데이터베이스는 데이터의 집합이며 데이터들이 모여있는 곳이다. 이곳에 사용자에 대한 정보나 블로그 글 등이 저장되어 있다.
어플리케이션 만들기
콘솔 창에 아래 명령어를 실행해 어플리케이션을 만든다.
x(myvenv) $ python manage.py startapp blog
그러면 blog
디렉토리가 생성되고 여러 파일이 있다.
xxxxxxxxxx
djangogirls
├── mysite
| __init__.py
| settings.py
| urls.py
| wsgi.py
├── manage.py
└── blog
├── migrations
| __init__.py
├── __init__.py
├── admin.py
├── models.py
├── tests.py
└── views.py
어플리케이션을 생성한 후에 장고에 이 어플리케이션을 사용한다고 알려주기 위해서 mysite/settings.py
에서 INSTALLED_APPS
을 수정한다.
xxxxxxxxxx
INSTALLED_APPS = [
'blog',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
블로그 글 모델 만들기
모든 Model
객체는 blog/models.py
파일에 선언한다. blog/models.py
파일을 열어 모든 내용을 삭제하고 아래 코드를 추가한다.
xxxxxxxxxx
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User', 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
- 다른 파일에 있는 코드를 불러와주는 역할
class Post(models.Model)
- 모델을 정의하는 코드
class
- 객체를 정의한다는 뜻Post
- 모델의 이름(클래스 이름의 첫 글자는 대문자로 쓴다)models
- Post가 장고 모델임을 의미한다.
models.CharField
- 글자 수가 제한된 텍스트를 정의할 때 사용models.TextField
- 글자 수에 제한이 없는 긴 텍스트를 위한 속성models.DateTimeField
- 날짜와 시간models.ForeignKey
- 다른 모델에 대한 링크를 의미
def publish(self)
는 publish
라는 메서드이다. def
가 함수/메서드라는 뜻이고, publish
가 메서드의 이름이다.
데이터베이스에 모델을 위한 테이블 만들기
데이터베이스에 Post 모델을 추가하기 위해 아래 명령을 입력한다.
x(myvenv) $ python manage.py makemigrations blog
Migrations for 'blog':
blog/migrations/0001_initial.py:
- Create model Post
장고는 데이터베이스에 반영할 수 있도록 마이그레이션 파일(migration file)이 있다. 아래 명령을 실행해 실제로 데이터베이스에 모델 추가를 반영한다.
x(myvenv) $ python manage.py migrate blog
Operations to perform:
Apply all migrations: blog
Running migrations:
Rendering model states... DONE
Applying blog.0001_initial... OK