[Python] Django Tutorial_2.1

손종일·2020년 8월 31일
0

Django

목록 보기
3/4
post-thumbnail

Django tutorial_2.1

1. 데이터베이스 설치

INSTALLED_APPS : 장고와 함께 딸려오는 아래의 앱들을 포함합니다.
앱들은 다수의 프로젝트에서 사용할 수 있고, 쉽게 사용하도록 패키징하여 배포할 수 있습니다.

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

이러한 기본 어플리케이션들 중 몇몇은 최소한 하나 이상의 테이블을 사용하는데 그러기 위해서 데이터베이스에서 테이블을 미리 만들어야합니다. 아래 명령어를 통하여 DB에 테이블을 만들 수 있습니다.

$ python manage.py migrate

2. 모델 생성

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

from django.db import models

# Question 이라는 Class 생성
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)
        		# 정수 필드

여기서 Field 클래스들은 필수 인수가 필요합니다.
ForeignKey는 다 vs 일, 다 vs 다, 일 vs 일 등 데이터베이스들의 관계를 지원하며 Choice가 하나의 Question에 관계된다는 것을 장고에 알려줍니다.

3. 모델의 활성화

아래의 코드가 Django에게 많은 정보를 전달합니다.

  • 앱을 위한 데이터베이스 스키마 생성 (Create table문)
  • Question과 Choice 객체에 접근하기 위한 Python 데이터베이스 접근 API 생성
    그러나, 가장 먼저 현재 프로젝트에 polls 앱이 설치되어 있다는 것을 알려줍니다.
INSTALLED_APPS = [
    'polls.apps.PollsConfig',		#현재 프로젝트에 polls앱이 있다는 것을 알린다.
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

makemigrations 명령어를 자주 사용하게 될텐데, 해당 작업은 마이그레이션이라는 곳에 작성해놓은 모델들을 데이터베이스 테이블 내에 테이블을 만들 수 있도록 설계하는 작업입니다.
해당 명령어를 통하여 어떤 테이블을 만들어야할지 알 수 있습니다. (마이그레이션 파일 생성)

$ python manage.py makemigrations polls

//Migrations for 'polls':
  polls/migrations/0001_initial.py
    - Create model Question		# Question model의 테이블 생성
    - Create model Choice		# Choice model의 테이블 생성

showmigrations mysite[app이름] 명렁어는 DB에 적용되었는지 확인할 수 있습니다.

$ python manage.py showmigrations polls
// [X] 0001_initial  --> 

sqlmigrate 명령어는 생성된 migrations 파일들이 어떤 sql 문장을 실행하는지 보여줍니다.

$ python manage.py sqlmigrate polls 0001
//BEGIN;
--
-- Create model Question
--
CREATE TABLE "polls_question" (		# polls_question table 생성
    "id" serial NOT NULL PRIMARY KEY,
    "question_text" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
--
-- Create model Choice
--
CREATE TABLE "polls_choice" (		#polls_choice table 생성
    "id" serial NOT NULL PRIMARY KEY,
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL,
    "question_id" integer NOT NULL
);
ALTER TABLE "polls_choice"
  ADD CONSTRAINT "polls_choice_question_id_c5b4b260_fk_polls_question_id"
    FOREIGN KEY ("question_id")
    REFERENCES "polls_question" ("id")
    DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");

COMMIT;

migrate 명령어는 migrations들의 파일 중 생성되지 않은 migrations들을 수집하여 테이블을 생성하여 데이터베이스의 스키마의 동기화가 이루어지게 해줍니다.

$ python manage.py sqlmigrate polls 0001
//Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Rendering model states... DONE
  Applying polls.0001_initial... OK
profile
Allday

0개의 댓글