1. App creation


python manage.py startapp blog


2. edit settings.py


    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog',
    )


3. edit model.py


blog/models.py 파일을 열어서 안에 모든 내용을 삭제한 후 아래 코드를 추가하세요. :

    from django.db import models
    from django.utils import timezone


    class Post(models.Model):
        author = models.ForeignKey('auth.User')
        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


class Post(models.Model):는 모델을 정의하는 코드입니다. (모델은객체(object)`라고 했죠?).

  • class는 특별한 키워드로, 객체를 정의한다는 것을 알려줍니다.
  • Post는 모델의 이름입니다. (특수문자와 공백 제외한다면) 다른 이름을 붙일 수도 있습니다. 항상 클래스 이름의 첫 글자는 대문자로 써야 합니다.
  • models.Model은 Post가 장고 모델임을 의미합니다. 이 코드 때문에 장고는 Post가 데이터베이스에 저장되어야 된다고 알게 됩니다.

이제 속성을 정의하는 것에 대해서 이야기 해볼게요. : titletextcreated_datepublished_date,author에 대해서 말할 거에요. 속성을 정의하기 위해, 각 필드마다 어떤 종류의 데이터 타입을 가지는지를 정해야해요. 여기서 데이터 타입에는 텍스트, 숫자, 날짜, 유저 같은 다른 객체 참조 등이 있습니다.

  • models.CharField - 글자 수가 제한된 텍스트를 정의할 때 사용합니다. 글 제목같이 대부분의 짧은 문자열 정보를 저장할 때 사용합니다.
  • models.TextField - 글자 수에 제한이 없는 긴 텍스트를 위한 속성입니다. 블로그 콘텐츠를 담기 좋겠죠?
  • models.DateTimeField - 이것은 날짜와 시간을 의미합니다.
  • models.ForeignKey - 다른 모델이 대한 링크를 의미합니다.

시간 관계 상 모든 코드들을 하나하나 다 설명하지는 않을 거에요. 대신 모델의 필드와 정의하는 방법에 궁금하다면 아래 장고 공식 문서를 꼭 읽어보길 바랍니다. (https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-types).

def publish(self):는 무슨 뜻일까요? 이 것이 바로 앞서 말했던 publish라는 메서드(method) 입니다.def는 이 것이 함수/메서드라는 뜻이고, publish는 메서드의 이름입니다. 원한다면 메서드 이름을 변경할 수도 있어요. 이름을 붙일 때는 공백 대신, 소문자와 언더스코어를 사용해야 합니다. 예를 들어, 평균 가격을 계산하는 메서드는calculate_average_price라고 부를 수 있겠네요.

메서드는 자주 무언가를 되돌려주죠. (return) 그 예로 __str__ 메서드를 봅시다. 이 시나리오대로라면,__str__를 호출하면 Post 모델의 제목 텍스트(string) 를 얻게 될 거에요


4. create table for Django model

이제 데이터베이스에 우리의 새 모델, Post 모델을 추가할 거에요. 먼저 우리는 장고 모델에 (우리가 방금 만든!) 몇 가지 변화가 생겼다는 걸 알게 해줘야 합니다. python manage.py makemigrations blog를 입력해 보세요. 아마도 화면에 이렇게 보이겠죠?

(myvenv) ~/djangogirls$ python manage.py makemigrations blog
Migrations for 'blog':
  0001_initial.py:
  - Create model Post

장고는 데이터베이스에 지금 반영할 수 있도록 마이그레이션 파일(migration file)이라는 것을 준비해 두었답니다. 이제python manage.py migrate blog 명령을 실행해, 실제 데이터베이스에 모델 추가를 반영하겠습니다. :

(myvenv) ~/djangogirls$ python manage.py migrate blog
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Rendering model states... DONE
  Applying blog.0001_initial... OK

만세! 드디어 글 모델이 데이터베이스에 저장되었습니다.


5. edit blog/admin.py

 

이제 blog/admin.py 파일을 열어서 내용을 다음과 같이 바꾸세요. :

from django.contrib import admin
from .models import Post

admin.site.register(Post)

이제 Post 모델을 볼까요? 웹 서버를 실행하려면 콘솔창에서 python manage.py runserver를 실행하는걸 잊지마세요. 

. myenv/bin/activate

python manage.py runserver


브라우저를 열고 주소 창에 http://127.0.0.1:8000/admin/ 입력하면아래와 같은 로그인 페이지를 볼 수 있어요.

로그인 페이지


로그인을 하기 위해서는, 모든 권한을 가지는 슈퍼유저(superuser)를 생성해야해요. 커맨드라인으로 돌아가서 python manage.py createsuperuser을 입력하고 엔터를 누르세요. 메시지가 나타나면 사용자 이름 (소문자, 공백 없이), 이메일 주소 및 암호를 입력합니다. password 를 입력할 때 화면에 글자가 보이지 않는다고 해도 걱정하지 마세요. 원래 password 는 화면에 보이지 않습니다. 작성한 후에 enter를 누르세요. 실행화면은 아래와 같을 거에요. (슈퍼유저로 사용 될 username 과 email 주소는 본인 것이어야해요)

(myvenv) ~/djangogirls$ python manage.py createsuperuser
Username: admin
Email address: admin@admin.com
Password:
Password (again):
Superuser created successfully.

브라우저로 돌아와서 장고 관리자 페이지에서 슈퍼유저로 로그인한 후 대시보드를 확인하세요.

Django 관리자

게시글로 가서 이것 저것 시도해보세요. 5 - 6개 블로그 포스트를 올려보세요. 안에 내용은 걱정하지 마세요. 튜토리얼에 있는 텍스트를 그냥 복사-붙여넣기 할 수 있으니까요.

최소한 2, 3개의 글들에 게시 날짜가 있는지 확인하세요. (모두 볼 필요는 없어요) 이건 나중에 도움이 될 거에요.

Django 관리자

장고 관리자에 대해서 좀 더 알고 싶다면 장고 공식 문서를 참고하세요. :https://docs.djangoproject.com/en/1.8/ref/contrib/admin/

자, 여러분은 내 첫 번째 장고 모델을 만들었어요


+ Recent posts