Kilkat

4. django App, Models 생성하기 본문

Programming/django

4. django App, Models 생성하기

KimKwangWoon 2022. 7. 1. 00:31

django에서의 App은 python package임. django App을 생성하면 model, view, template 등이 생성됨. 대부분의 django 프로젝트는 하나 이상의 django App으로 만들어짐.


python manage.py startapp blog

위의 명령어를 실행해 blog App을 생성함.

 

1. dir tree

blog가 정상적으로 생성되면 사진1과 같은 dir tree로 이루어짐

 

# mysite/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

blog가 제대로 생성된다면 mysite/settings.py에서 INSTALLED_APPS의 부분에 blog를 추가해야함. 만약 새롭게 추가되는 App이 있는 경우 추가적으로 추가해 줘야함.

 

# blog/models.py

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

blog/models.py에 위와 같은 코드를 추가해 줘야함. django에서의 models의 역할은 db를 관리한다고 생각하면됨. class로 객체를 정의하고, 위와 같이 작성 후 생성 명령어를 입력하면 db에 들어가는 table 이름이 blog_post로 생성되는 것을 확인할 수 있음.  author에 있는 ForeignKey의 경우 다른 모델에 대한 링크를 의미함. 지금은 이해가 안될 수 있지만 db생성 후 desc로 table 구조를 확인하면 이해할 수 있는 부분임. __str__의 경우 문자열을 반환해주는 것을 확인할 수 있음. 만약 __str__을 호출하게 되면 return self.title 즉 post의 title이 string으로 반환됨.

 

python manage.py makemigrations blog

db에 테이블, 행, 열은 위에서 정의를 했고 이를 db에 적용하기 위해선 migration file이 필요함. migration file을 생성하기 위해선 위의 명령을 사용하여 생성할 수 있음. 처음 생성하는 경우 makemigrations 뒤에 다른 옵션이 따라오지 않지만 지금의 경우 blog만 적용하는 것이기 때문에 blog를 기입하여 생성해야함.

 

python manage.py migrate blog

migration file의 경우 윗줄의 명령어에서 생성했기 때문에 바로 위의 명령어를 사용하여 db에 바로 적용할 수 있음.

 

2. db

위의 db table은 migrate적용 전 db의 table이고 아래 db table의 경우 migrate 적용 후의 db table임. blog_post가 새로 생긴것을 확인할 수 있음.

 

3. blog_post

desc 명령어를 사용하여 table 구조를 확인해보면 제대로 생성된 것을 확인할 수 있음. 여기서 들수 있는 의문은 id 필드는 따로 정의하지 않았는데 생성되어 있는 것을 확인할 수 있음. django의 경우 각각 모델에 id 필드를 자동으로 추가해줌.

 

 

 


*본 글은 django girls 튜토리얼을 보고 공부한 내용을 토대로 복습을 위해 작성된 글임, 보다 자세한 내용과 정보를 보고 싶다면 djangogirls 튜토리얼을 볼것을 추천함*

'Programming > django' 카테고리의 다른 글

3. django settings.py 설정  (0) 2022.06.29
2. python venv(가상환경) 사용법  (0) 2022.06.29
1. vscode에 djnago를 연결해보자  (0) 2022.06.28
Comments