DevHyun

[DevHyun's Blog] Django&Python으로 Blog 만들기 - Blog의 게시글 Model 만들기 본문

Web/Django&Python Blog Projecct

[DevHyun's Blog] Django&Python으로 Blog 만들기 - Blog의 게시글 Model 만들기

D3V3L0P3R 2020. 10. 16. 14:04

 

장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다.

 

tutorial.djangogirls.org/ko

 

들어가며 · HonKit

1차 : 2015. 10. 1. 이수진, 함기훈, Jay Park, 조혜선, 정광윤, 임정훈, 문지영, 김휘경, 송석리, 여형석, 심혜민

tutorial.djangogirls.org

 

 

1. Django 모델에 대한 이해

- Django의 내장 ORM(Object-relational mapping 단순하게 표현하면 객체와 관계와의 설정)

- ORM의 역할 : SQL을 직접 작성하지 않아도 장고 모델을 통해 데이터베이스로 접근한다. (조회/추가/수정/삭제)

 

2. annaconda3에서 가상환경 activate 한 후 Blog 프로젝트 생성!

conda activate devhyun
cd c:\django
django-admin startproject DevhyunDjangoBlog

 

3. pycharm 에서 open project

 

4. run - edit configurations 에서 interpreter를 Devhyun(가상환경)의 python 3.7로 변경

 

5. run - edit configurations 에서 parameters를 runserver로 변경

 

6. run 테스트 성공적!

 

7. file - settings - Project : DevhyunDjangoBlog 에서 interpreter를 Devhyun(가상환경)의 python 3.7로 변경

 

8. file - settings - tools - terminal 에서 shell path를 아래와 같이 변경

* anaconda3 경로

* 가상환경 이름

cmd.exe " /K" C:\ProgramData\Anaconda3\Scripts\activate.bat devhyun

 

9. pycharm 내의 terminal 에서 blog App 생성

python manage.py startapp Blog

 

10. DevhyunDjangoBlog의 settings.py 의 INSTALLED_APPS에 9번에서 생성한 Blog 추가하기

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

11. Blog\models.py에 있는 내용 Clear한뒤 Blog의 게시글 Model 만들기!

* Model 객체는 blog/models.py 파일에 선언하여 모델을 만듭니다. 이 파일에 블로그의 게시글 모델도 정의하겠습니다.

* Holy.... 길어져버렸다!

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

* 추측 및 구글링

11-1. from django.conf import settings

: django.conf 패키지 (Django의 제공 파일)에서 settings 객를 참조.

: settings.py 값을 가져오기 위한 선언.

 

11-2. from django.db import models

: django.db 패키지에서 models 객체를 참조.

: db 사용을 위해 필요한 선언.

 

11-3. from django.utils import timezone

: django.uttils 패키지에서 timezone 객체 참조.

: 정확한 시간의 사용을 위해 필요한 선언.

 

11-4. Class Post(models.Model):

: Class 이름은 Post(특수문자와 공백 제외한다면) 다른 이름을 붙일 수도 있습니다. 항상 클래스 이름의 첫 글자는 대문자로 써야 됨.

:  Post는 Django의 Model이며 이 코드 때문에 Django는 Post가 데이터베이스에 저장되어야 한다고 알게 됨.

 

11-5. author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

: Post라는 Class의 속성정의 시작(외래키..인듯?)

: author 는 Post의 ForeignKey이고 settings.py의 AUTH_USER_MEDEL에 CASCADE=종속 됨)

 

11-6. title = models.CharField(max_length=200)

: title 은 최대 200자까지 입력가능한 문자열 필드(nvarchar 200 인듯?)

 

11-7. text = models.TextField()

: text 는 글자수 제한 없는 text 필드

 

11.8 created_date = models.DateTimeField(default = timezone.now)

: created_date 는 DateTime 필드, default는 현재시간

 

11.9 published_date = models.DateTimeField(blank = true , null = true)

: published_date 는 빈값 입력 가능, null값 입력 가능한 필드

 

11.10 def publish(self) : 

             self.published_date = timezone.now()

             self.save

: publish = published_date를 현재시간으로 지정하고 save하는 함수로 선언.

 

11.11 def __str__(self):

             return self.title

: __str__ = 호출 시 title을 return해주는 함수로 선언.

 

 

12. terminal에서 데이터베이스 모델을 위한 Table 만들기 전 준비

python manage.py makemigrations Blog

- enter

Migrations for 'Blog':
blog/migrations/0001_initial.py:
- Create model Post

 

13. terminal에서 명령어를 통해 데이터베이스에 모델 추가를 반영!

python manage.py migrate Blog

-enter

Operations to perform:

Apply all migrations:

blog Running migrations:

Applying blog.0001_initial... OK

 

Comments