Django - 튜토리얼 part2 (모델 / 어드민 세팅)

Joey Lee·2020년 4월 29일
0

Django

목록 보기
2/23

튜토리얼2 바로 가기

1. Database Set-up

  • 파이썬에서는 데이터베이스로 sqlite3를 기본적으로 내장하고 있어 장고를 쓸 때는 별도로 데이터베이스를 설치하지 않아도 됩니다.
  • 다만, 보다 scalable한 데이터베이스(PostgreSQL, MySQL 등)가 필요하다면, 이들 데이터베이스에 적절한 database bindings을 설치하고, DATABASES 'default'의 값을 매칭될 수 있도록 연결해 줘야 합니다. 뿐만 아니라, USER, PASSWORD, HOST도 반드시 추가로 세팅을 해 줘야 합니다.

1) mysite/settings.py에 대한 설명

  • TIME-ZONE 변경 가능
  • INSTALLED_APPS 에서 기본 설치된 app 확인할 수 있음.
  • django.contrib.admin : 어드민 사이트
  • django.contrib.auth : 인증 시스템
  • django.contrib.contenttypes : 컨텐츠 타입 프레임워크
  • django.contrib.sessions : 세션 프레임워크
  • django.contrib.messages : 메시징 프레임워크
  • django.contrib.staticfiles : static files 관리 프레임워크
  • 위의 APPS 중 일부는 테이터베이스 테이블을 사용할 수 있으며, 사용하기 위해서는 migrate 명령어를 입력해 주면 됨
$ python manage.py migrate

2. Model 만들기

Django에서 Model은 데이타 서비스를 제공하는 Layer입니다. Django의 Model은 각 Django App안에 기본적으로 생성되는 models.py 모듈 안에 정의하게 됩니다. models.py 모듈 안에 하나 이상의 모델 클래스를 정의할 수 있으며, 하나의 모델 클래스는 데이타베이스에서 하나의 테이블에 해당됩니다.

  • 모델이란 데이터베이스에 저장될 데이터를 클래스 형태로 구성
  • 객체는 데이터베이스가 저장하는 단위와 유사 (행을 추가하는 개념. 한 행이 객체라고 보면 됨
  • 데이터와 함께 동작을 함께 정의 (저장, 읽기, 수정, 삭제 : CRUD)
  • 왜 클래스로 정의하는가? => 함수로 구성되면 모든 동작을 직접 구현해야 되나, 클래스는 상속기능을 이용해 필요한 부분만 구현하면 되기 때문임)

polls app에서는 2개의 모델 QuestionChoice을 만들게 되는데, 각가 아래와 같은 데이터를 가지게 된다.

  • Question : 1) 질문, 2) Publish 시간
  • Choice : 1) 질문, 2) 답변, 3) 답변 횟수

polls/models.py

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
  • Question과 Choice 각 모델은 class로 정의하며, django.db.models.Model를 상속받아 만들게 됩니다.
  • Field Name : 사람이 읽기 쉽게 표현해서 정의 (ex. pub_date)
  • Charfield는 한 줄 정도의 문자를, DateTimeField는 날짜와 시간을, IntergerField는 숫자(정수) 형식을 뜻합니다. max_length는 최대 글자수, default=0은 초기값입니다.
  • ForeignKey는 Choice와 Question을 연결해 주는 것으로 다대일(many-to-one) 관계로 설정됐으며, on_delete=models.CASCADE는 원래 데이터인 Question이 삭제될 경우 이 필드가 삭제된다는 의미입니다. (필수 입력사항)

위와 같이 모델을 설정해 주면, 장고는 아래와 같은 작업을 합니다.

  • 이 앱을 위한 Database schema 생성
  • Question, Choice 객체를 위한 파이썬 데이터베이스 엑세스 API 생성

3. Activating Model

모델을 만든 뒤 해야 되는 첫 번째 작업은 polls란 앱이 설치되었다는 것을 우리 프로젝트에 알려줘야 합니다. 이를 위해 우리는 settings.py에 관련 내용을 아래와 같이 추가해야 합니다.

1) Setting.py에 앱 추가 (만약, 아직까지 안 했다면)

mysite/settings.py

INSTALLED_APPS = [
    'polls.apps.PollsConfig',  # <-- 이 부분을 추가
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

2) Migration

  • models.py에 구현한 모델들은 바로 사용할 수 없습니다. makemigration을 거쳐, migrate해야 비로소 사용 가능합니다.
  • 장고에서 모델 클래스를 생성하고 난 후, 해당 모델에 상응하는 테이블을 데이타베이스에서 생성할 수 있습니다. 파이썬 모델 클래스의 수정 및 생성을 DB에 적용하는 과정을 Migration이라 부르며, 이는 장고가 기본적으로 제공하는 ORM(Object Relational Mapping)을 통해 진행됩니다.

Makemigration

  • 모델을 추가 또는 변경했을 경우 makemigration 명령어를 통해 변경사항을 migration으로 저장합니다.
  • migration은 장고가 모델에 어떤 변화들이 있었는지를 저장하는 파일입니다. 따라서 각 앱마다 migrations 폴더가 따로 있고 0001_initial.py파일이 생긴 것을 볼 수 있습니다.
$ python manage.py makemigrations polls

위의 명령어를 입력하고 나면, 다음과 같은 메시지가 뜨게 됩니다.

Migrations for 'polls':
  polls/migrations/0001_initial.py
    - Create model Question
    - Create model Choice

Migrate

  • 실제적인 데이터베이스가 생성되는 시점이 이 때입니다. makemigrations를 통해 생성된 임시파일을 setting.py에 작성된 데이터베이스에 반영됩니다. 모델이 변경된 것을 적용하기는 굉장히 어렵기 때문에 실무에서는 유의해서 실행해야 합니다.
  • 장고의 기본 DB는 sqlite인데, 이 때부터 db.sqlite3에 데이터 저장공간이 생성됩니다.
  • Migration을 통해 우리는 데이터베이스나 테이블을 직접 삭제/생성할 필요 없이 모델에 변화를 줄 수 있습니다.
$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Rendering model states... DONE
  Applying polls.0001_initial... OK

3. Playing with API

Python shell은 아래 명령어로 실행할 수 있습니다. shell에서 나올 때는 exit()를 해 주면 됩니다.

$ python manage.py shell

이 부분은 생략하니, 자세한 내용은 튜토리얼을 참고하시기 바랍니다.

4. Django Admin 소개

장고에서는 어드민 기본 기능을 제공한다.

1) Admin User 생성

$ python manage.py createsuperuser
  • 위의 명령어를 실행한 뒤 username, email, password를 설정해 준다.

2) Development Server 시작하기

$ python manage.py runserver

3) 어드민에서 관리할 모델 정의

어드민에서 관리할 모델은 polls/admin.py에 명시적으로 등록해야 합니다. 등록된 이후에는 어드민에서 Poll과 Choice들에 데이터를 입력/수정/삭제/조회를 할 수 있습니다.

from django.contrib import admin
from polls.models import *    

admin.site.register(Question)
admin.site.register(Choice)
profile
안녕하세요!

0개의 댓글