이끼의 생각

Django Web (7) [실습] 블로그 만들기 - App, Model, DB 생성 본문

파이썬 장고 웹 프레임워크

Django Web (7) [실습] 블로그 만들기 - App, Model, DB 생성

IKKIson 2019. 5. 19. 20:41

지금까지 공부한 내용을 기준으로 예제 실습을 시작해보겠습니다. 이 후에 배우는 내용도 추가하면서 블로그 앱을 만들어가볼께요.


파이참, 여러분들의 개발환경을 준비해주세요~

(명령어실행은 프롬프트, 파워셀에서 작업하는 것과 똑같지만 파이참은 파이참터미널에서 자동으로 가상환경이 활성화됩니다. 파이참을 사용하시는 경우 활성화 상태를 확인해보시고, 다른 환경이신 경우 직접 가상환경을 활성화 시키고 작업해주세요~~)



블로그 어플리케이션 만들기


(1) 블로그 App을 생성하겠습니다.


앞 3편에서 연습해본 App 만들기를 참고하세요~


> python manage.py startapp blog




블로그 앱을 한번 확인해볼께요.



blog

├── migrations

 |           └── __init__.py

├── __init__.py

├── admin.py

├── models.py

├── tests.py

└── views.py


이런식으로 구성되면 성공!



(2) setting에 앱 추가


이제 setting.py에 INSTALLED_APPS에 블로그 앱을 추가해 볼께요.


setting.py는 어딘지 아시겠죠?


게시글 기준 경로 : IKKIsonDjango/IKKIsonDjango/setting.py


INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'elections',

    'blog',

]





블로그 게시글 모델 만들기


블로그 앱 디렉토리 안에 models.py 파일을 열러 모델을 만들어 보겠습니다. 이 파일에 블로그 글 모델을 정의할겁니다.


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

잠깐! str양 옆에 언더스코어(_) 를 두 개씩 넣었는지 다시 확인하세요. 파이썬에서 자주 사용되는데, "던더(dunder; 더블-언더스코어의 준말)"라고도 불러요.


블로그 게시글 모델을 정의하였습니다. 윗줄부터 천천히 설명드리겠습니다.


class Post(models.Model): 블로그 게시글의 모델을 정의하는 코드입니다.

- class는 특별한 키워드로, 객체를 정의한다는 것을 알려줍니다.

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

- models은 Post가 장고 모델임을 의미합니다. 이 코드 때문에 장고는 Post가 데이터베이스에 저장되어야 한다고 알게 됩니다.


다음은 속성, 클래스 변수입니다. (title, text, created_date, published_date, author)

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


models.CharField - 글자 수가 제한된 텍스트를 정의할 때 사용합니다. 글 제목같이 짧은 문자열 정보를 저장할 때 사용합니다.

models.TextField - 글자 수에 제한이 없는 긴 텍스트를 위한 속성입니다. 블로그 콘텐츠를 담습니다.

models.DateTimeField - 날짜와 시간을 의미합니다.

models.ForeignKey - 다른 모델에 대한 링크를 의미합니다.


이외 에도 모델에서 사용되는 많은 데이터 타입이 아래의 장고 공식문서링크에서 확인하시면 됩니다.

바로가기 => 장고 공식문서 모델 데이터타입


마지막으로 메서드 입니다.


def publish(self): publish라는 메서드(method)로 '출시하다' 라는 기능을 정의했습니다. def는 이것이 함수/메서드라는 뜻이고, publish는 메서드의 이름입니다. 원하는 데로 메서드 이름을 변경할 수도 있어요. 이름을 붙일 때는 공백 대신, 소문자와 언더스코어를 사용해야 합니다. 예를 들어, 평균 가격을 계산하는 메서드는 calculate_average_price라고 부를 수 있겠네요.

메서드는 반환값이 있는 경우가 있습니다.(return) 그 예로 __str__ 메서드가 있내요. 위 소스코드의 시나리오오에서는 __str__ 메서드를 호출하면 Post 모델의 제목 텍스트(string)를 얻게 됩니다.




모델을 이용하여 데이터베이스 모델 만들기


(1) models.py를 이용한 마이그레이션 생성


이제 마지막으로 데이터베이스에 새 모델을 추가할 겁니다. Post라는 이름의 모델을 추가하는데 먼저 아래의 명령어를 실행해주셔야 됩니다.


> python manage.py makemigrations blog


정상 실행되면 아래와 같은 결과가 나올겁니다.


(myvenv) ~/djangoprojects$ python manage.py makemigrations blog

Migrations for 'blog':

  blog/migrations/0001_initial.py:

  - Create model Post


실제 실행 화면 입니다.




위의 명령어를 실행하면 장고에서 데이터베이스에 바로 반영할 수 있도록 마이그레이션 파일(migration file)이 미리 준비되 있습니다. 저의 게시글 기준으로 IKKIsonDjango/blog/migrations/0001_inital.py으로 생성되내요.


0001_inital.py 의 실제 내용입니다.





(2) 마이그레이션을 적용하여 데이터베이스 모델 적용


이제 우리가 models.py 에서 미리 정의한 모델을 이용하여 생성된 마이그레이션 파일로 실제 데이터베이스에 모델 추가를 반영해봅시다. 아래의 명령어를 실행하세요.


> python manage.py migrate blog


정상 실행되면 아래와 같은 결과가 나옵니다.


(myvenv) ~/djangoporject$ python manage.py migrate blog

Operations to perform:

  Apply all migrations: blog

Running migrations:

  Rendering model states... DONE

  Applying blog.0001_initial... OK


실제 실행 화면입니다.







**출처 및 참고**

[블로그] 초보몽키님의 개발공부로그

[Wikidocs] 핀코인님의 Django 자습

[프로그래머스] 정두식님의 장고를활용한 웹사이트만들기 동영상강의

[오픈소스튜로리얼] Quasar Beyond님의 Django : Python WebFrameWork 동영상강의

[장고걸스공식] 이수진님 외. 장고걸스 튜토리얼 한국어번역

[장고걸스공식] 이수진님 외. 장고걸스 튜토리얼 심화 한국어번역

장고 공식 Document Tutorial



Comments