티스토리 뷰

study/Django

Django tutorial 따라하기 2

xoxowo 2022. 6. 29. 15:06

튜토리얼 2에서는 튜토리얼 1에서 만든 mysite 프로젝트에 데이터베이스를 설치하고 첫 모델을 생성한 후, Django에서 자동 생성되는 관리자 사이트에 대해 짧게 소개한다고 되어있다.

 

데이터베이스 설치

 

데이터베이스 변경

기본적으로 장고는 SQLite을 사용하도록 되어있다고 한다. 이 SQLite는 Python에서 기본으로 제공되기 때문에 별도로 설치할 필요가 없지만 실제 프로젝트를 시작할 때에는, 좀 더 확장성 있는 데이터베이스를 사용하는 것이 좋다.

 

데이터베이스 변경은 mysite프로젝트 내 settings.py 파일에서 설정할수 있다. 이 파일은 데이터베이스 등 장고 설정을 모듈 변수로 표현한 모듈(파일)이다.

 

DATABASES 의 default 항목을 살펴보면 딕셔너리로 

ENGINE 과 NAME이 있는데 

ENGINE은 데이터베이스 매니지먼트 시스템

NAME은 데이터베이스의 이름이라고한다.

 

 

 

 

 

데이터베이스 테이블 만들기

settings.py 파일을 살펴보면 데이터베이스 말고도 다른 코드들이 있는데, 파일 윗쪽에 작성되어있는 이 INSTALLED_APPS는 사용하기 편리하도록 기본으로 제공는 어플리케이션들이 담겨져있다. 이 기본 어플리케이션들 중 몇몇은 최소한 하나 이상의 데이터베이스 테이블을 사용하기 때문에 데이터베이스의 테이블을 미리 만들어야한다. (이 코드에 본인이 작성한 app을 여기에 추가하여 app을 사용할 수 있다.)

django.contrib.admin – 관리용 사이트

django.contrib.auth – 인증 시스템

django.contrib.contenttypes – 컨텐츠 타입을 위한 프레임워크

django.contrib.sessions – 세션 프레임워크

django.contrib.messages – 메세징 프레임워크

django.contrib.staticfiles – 정적 파일을 관리하는 프레임워크

 

 

 

 migrate 명령은  INSTALLED_APPS 의 설정을 탐색하여, mysite/settings.py 의 데이터베이스 설정과 app 과 함께 제공되는 database migrations에 따라, 필요한 데이터베이스 테이블을 생성한다고한다. (이migrate에 대해서는 좀 더 공부하도록하자!)

+마이그레이션은 모델에 대한 변경 사항(필드 추가, 모델 삭제 등)을 데이터베이스 스키마로 전파하는 Django의 방법이라고한다. 

% python3 manage.py migrate

실제 실행 과정)

(django_tutorial) yujeong@xo-MacBook-Air mysite % python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

 

모델 만들기 (본질적으로, 모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)를 말한다.)

튜토리얼에서는 여론조사(polls) 앱에서 Question 과 Choice라는 두 가지 모델을 만드는데, Question는 질문과 발행일을 위한 두 개의 필드를 가지지며, Choice 선택 텍스트와 투표 집계를 위한 두 개의 필드를 가진다. 각각의 Choice``모델은 Question와 연관된다.

 

튜토리얼 안내대로 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)# question을 가리키고 있는 key
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

추가적으로 Question타입에 대해 Choice는 1: many로 Choice 가 ForeignKey를 가지고 있다.

 

 

모델의 활성화

우리가 작성한 앱을 mysite프로젝트에 포함하기 위해 위에서 보았던 INSTALLED_APPS에 추가해야한다고한다. 

 

(근데 어째서 'polls.apps.PollsConfig'라는 이름일까? 모듈을 살펴보니 polls 디렉토리 내부 models.py는 말 그대로 polls의 모델을 정의한 것이고 polls의 apps.py가 polls의 음.. 배포? 앱이라고하면 될듯하다. 그리고 이 apps.py 내부 함수명이 PollsConfig이기 때문에

INSTALLED_APPS 에 추가할 앱이름이 'polls.apps.PollsConfig' 였던 것이다. - 주의 -틀린 내용일 수 있음!)

 

 

 

 

 

 

 

 

 

이제 Django는 polls 앱이 포함된 것을 알게 되었다. makemigrations 명령어를 실행시켜보자.

이 makemigrations 명령어는 모델을 변경한 것(새로운 모델을 만들거나 변경)과 이 변경 사항을 migration으로 저장한다는 것을 반영해달라고 장고에게 알려준다.

% python3 manage.py makemigrations polls

실제 실행 과정) 위 명령어를 사용 후 나오는 Migration은 Django가 모델(즉, 당신의 데이터베이스 스키마)의 변경사항을 디스크에 저장하는 방법이다.

(django_tutorial) yujeong@xo-MacBook-Air mysite % python3 manage.py makemigrations polls
Migrations for 'polls':
  polls/migrations/0001_initial.py
    - Create model Question
    - Create model Choice

다시 migrate 명령어를 사용하여 추가된 polls 앱에 대한 데이터베이스에 모델과 관련된 테이블을 생성하자.

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

% python3 manage.py migrate

실행 과정 예시)

(django_tutorial) yujeong@xo-MacBook-Air mysite % python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Applying polls.0001_initial... OK

 

 

API 가지고 놀기..?

먼저 API가 무엇일까 알아봤는데 개발자가 필요로 하는 데이터를 뽑아낼 수 있도록 만들어낸 함수 또는 서버에게 데이터를 입력할수 있도록 하는 함수

 

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

% python3 manage.py shell

# shell에 들어가면 >>> 로 시작하며 shell을 끌 때는  contral + d 누르면 돌아간다

 

관리자 생성하기

관리 사이트에 로그인 할 수 있는 사용자를 생성하자

% python3 manage.py createsuperuser

% Username : 원하는 이름
% Email address :  원하는 이메일 주소
% Password: 원하는 패스워드 (입력 시 화면에 출력되지 않으니 주의)
% Password (again): 한번 더 입력
 # 비밀번호가 짧거나 쉽다면 아래와 같은 안내가 나올 수 있으며 선택하면된다
 This password is too common.
 This password is entirely numeric.
 Bypass password validation and create user anyway? [y/N]: y
 
 # 최종적으로 생성하였다면 아래 메세지가 뜬다
 Superuser created successfully.

 

개발 서버 시작

장고 관리자(admin) 사이트는 기본적으로 제공하고있어 따로 만들지 않아도 된다고한다. 장고는 모델 즉 데이터베이스를 ui가 존재하는 화면으로 관리할 수 있게끔 어드민을 바로 만들어준다.

 

이제 서버를 구동하여 admin 으로 접속하자.

% python3 manage.py runserver

서버를 구동하면 메인 로컬 도메인 뒤에 /admin/ 추가하면 접속할 수 있다. (http://127.0.0.1:8000/admin/)

 

위에서 입력한 admin 사용자 정보를 입력하면 내부로 이동할 수 있다.

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

우리가 1챕터에서 만든 polls app이 보이지 않기 때문에 polls/admin.py에 코드를 추가해주자.

from django.contrib import admin
# 상대경로인 polls/models.py 모듈에 있는 Question class를 import 한다
from .models import Question

admin.site.register(Question)

코드를 추가하고 페이지를 세로고침하면 polls가 추가로 생성된 것을 확인 할 수 있다.

+ add를 누르면 Question에 내용을 추가할 수도 있고 그 외 다양한 작업을 할 수 있다. 


내용 전문 및 출처 -djangoproject, youtube-명준MJ

 

'study > Django' 카테고리의 다른 글

Django - MtoM Field 없이 구현  (0) 2022.07.06
westarbucks 만들기 - models.py  (0) 2022.07.05
Django tutorial 따라하기 4  (0) 2022.06.30
Django tutorial 따라하기 3  (0) 2022.06.29
Django tutorial 따라하기 1  (0) 2022.06.28
댓글