장고의 모델, 관리자 및 배포
장고 모델
1. 어플리케이션 만들기
난 이전에 만든 test_django 폴더 밑에 manage.py, mysite, db.sqlite3이 있다.
manage.py를 이용하여 blog라는 폴더 밑에 어플리케이션을 만들거다. 아래 명령어를 수행한다.
>> python manage.py startapp blog
그럼 test_django 폴더 아래 blog 폴더가 만들어지고, 어플을 만들기 위한 함수들이 자동으로 생성된다.
애플리케이션을 생성한 후 장고에 사용해야 한다고 알려줘야 한다. 이 역할을 하는 파일이 mysite/settings.py.
이 파일 안에서 INSTALLED_APPS를 열어, )바로 위에 'blog'를 추가한다. 최종 결과물은 아래같다.
2. 블로그 글 모델 만들기
모든 Model 객체는 blog/models.py 파일에 선언하여 모델을 만든다. 이 파일에 우리의 블로그 글 모델도 정의.
blog/models.py 파일을 열어서 안에 모든 내용을 삭제한 후 아래 코드를 추가.
from django.conf import settings
from django.db import models
from django.utils import timezone
# models은 Post가 장고 모델임을 의미. 이 코드 때문에 장고는 Post가 DB에 저장되어야 한다고 알게 된다. 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): # __str__를 호출하면 Post 모델의 제목 텍스트(string) 리턴
return self.title
|
cs |
- models.CharField - 글자 수가 제한된 텍스트를 정의할 때 사용. 글 제목같이 짧은 문자열 정보를 저장할 때 사용
- models.TextField - 글자 수에 제한이 없는 긴 텍스트를 위한 속성. 블로그 콘텐츠를 담기위함
- models.DateTimeField - 날짜와 시간을 의미.
- models.ForeignKey - 다른 모델에 대한 링크를 의미.
3. DB에 모델을 위한 테이블 만들기
위에서 만든 Post 모델을 DB에 추가.
먼저 우리는 장고 모델에 (우리가 방금 만든!) 몇 가지 변화가 생겼다는 걸 알려줘야 한다.
>> python manage.py makemigrations blog
결과 화면
장고는 DB에 지금 반영할 수 있도록 마이그레이션 파일(migration file)이라는 것을 준비해 두었다.
>> python manage.py migrate blog
명령을 실행해, 실제 DB에 모델 추가를 반영하겠다.
참고