TIL | Django | 공식 문서 정리 | 첫번째 앱 PART.2

이도운·2022년 1월 7일
0

TIL

목록 보기
33/73
post-thumbnail

데이터베이스 설치

이제, mysite/settings.py 파일을 열어보셍요. 이 파일은 Django 설정을 모듈 변수로 표현한 보통의 Python 모듈입니다.

기본적으로는 SQLite을 사용하도록 구성되어 있습니다. 만약 데이터베이스를 처음 경험해보거나, Django에서 데이터베이스를 한번 경험해 보고 싶다면, SQLite가 가장 간단한 방법입니다. SQLite는 Python에서 기본적으로 제공되기 때문에 별도로 설치할 필요가 없습니다. 그러나 실제 프로젝트를 시작할 때에는, 좀 더 확장성 있는 데이터베이스를 사용하는 것이 좋습니다.

SQLite를 데이터베이스로 사용하지 않는 경우, USER, PASSWORD, HOST 같은 추가 설정이 반드시 필요합니다. 더 자세한 내용은 DATABASES 문서를 참조해 주세요.

mysite/settings.py를 편집할 때, 당신의 시간대에 맞춰 TIME_ZONE 값을 설정하세요.

또한, 이 파일의 윗쪽에 있는 INSTALLED_APPS에 대해 언급하자면, 이 파일은 현재 Django 인스턴스에서 활성화된 모든 Django 어플리케이션들의 이름이 담겨 있습니다. 앱들은 다수의 프로젝트에서 사용될 수 있고, 다른 프로젝트에서 쉽게 사용될 수 있도록 패키징항여 배포할 수 있습니다.

기본적으로 다음의 앱들을 포함합니다.

  • django.contrib.admin - 관리용 사이트.
  • django.contrib.auth - 인증 시스템
  • django.contrib.contenttype - 컨텐츠 타입을 위한 프레임워크
  • django.contrib.sessions - 세션 프레임워크
  • django.contrib.messages - 메세징 프레임워크
  • django.contrib.staticfiles - 정적 파일을 관리하는 프레임워크

이러한 기본 어플리케이션들 중 몇몇은 최소한 하나 이상의 데이터베이스 테이블을 사용하는데, 그러기 위해서는 데이터베이스에서 테이블을 미리 만들 필요가 있습니다. 이를 위해, 다음 명령을 실행합니다.

python manage.py migrate


모델 만들기

모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조를 말합니다.

# 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)

모델의 활성화

모델에 대한 작은 코드가, Django에게 상당한 양의 정보를 전달합니다. Django는 이 정보를 가지고 다음과 같은 일을 할 수 있습니다.

  • 이 앱을 위한 데이터베이스 스키마 생성(CREATE TABLE 문)
  • Question과 Choice 객체에 접근하기 위한 Python 데이터베이스 접근 API를 생성

그러나, 가장 먼저 현재 프로젝트에게 앱이 설치되어 있다는 것을 알려야 합니다.

# 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',
]

이제, Django는 polls 앱이 포함된 것을 알게 되었습니다. 한번 다른 명령을 내려봅시다.

python manage.py makemigrations polls

makemigrations을 실행시킴으로서, 당신이 모델을 변경시킨 사실과 이 변경사항을 migration으로 저장시키고 싶다는 것을 Django에게 알려줍니다.

그리고 당신을 위해 migration들을 실행시켜주고, 자동으로 데이터베이스 스키마를 관리해주는 migrate 명령어가 있습니다.

migrate 명령은 아직 적용되지 않은 마이그레이션을 모두 수집해 이를 실행하며 이 과정을 통해 모델에서의 변경 사항들과 데이터베이스의 스키마의 동기화가 이루어집니다.

마이그레이션은 매우 기능이 강력하여, 마치 프로젝트를 개발할 때처럼 데이터베이스나 테이블에 손대지 않고도 모델ㅇ의 반복적인 변경을 가능하게 해줍니다. 동작 중인 데이터베이스를 자료 손실 없이 업그레이드 하는 데 최적화 되어 있습니다.

마이그레이션을 만드는 명령과 적용하는 명령이 분리된 것은 버전 관리 시스템에 마이그레이션을 커밋하고 앱과 함께 출시할 수 있도록 하기 위해서입니다.

manage.py 유틸리티로 어떤 일들을 할 수 있는지 django-admin 문서를 읽어보세요.


API 가지고 놀기

이제, 대화식 Python 쉘에 뛰어들어 Django API를 자유롭게 가지고 놀아봅시다. Python 쉘ㅇ을 실행하려면 다음의 명령을 입력합니다.

python manage.py shell

여기서 잠깐 모델을 수정하여 __str() 메소드를 추가해 봅시다.

# polls/models.py
from django.db import models

class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

당신의 모델에 __str()__ 메소드를 추가하는 것은 객체의 표현을 대화식 프롬프트에서 편하게 보려는 이유 말고도, Django가 자동으로 생성하는 관리 사이트에서도 객체의 표현이 사용되기 때문입니다.

모델의 관계에 대한 더 많은 정보는 관련 객체에 접근하기를 참조하셍요. API에서 이중 밑줄을 이용해서 어떻게 필드를 조회할 수 있는지는 필드 조회를 읽어보셍요. 데잍터베이스 API에 대한 자세한 내용을 보려면, 데이터베이스 API 레퍼런스를 읽어보세요.


Django 관리자 소개

관리 사이트에 로그인 할 수 있는 사용자를 생성해 봅시다. 다음과 같은 명령을 수행합니다.

python manage.py createsuperuser


개발 서버 시작

개발 서버가 동작하고 있지 않다면 다음 명령으로 시작합니다.

python manage.py runserver


관리자 사이트에 들어가기

앞서 생성한 슈퍼유저 계정으로 로그인해봅시다.

편집 가능한 그룹과 사용자와 같은 몇 종류의 컨텐츠를 볼 수 있습니다. 이것들은 django.contrib.auth 모듈에서 제공되는데, Django에서 제공되는 인증 프레임워크입니다.


관리 사이트에서 poll app을 변경가능하도록 만들기

# polls/admin.py
from django.contrib import admin

from .models import Question

admin.site.register(Question)

참고

장고 공식 문서
https://docs.djangoproject.com/ko/4.0/intro/tutorial02/

profile
⌨️ 백엔드개발자 (컴퓨터공학과 졸업)

0개의 댓글