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
모델은 부가적인 메타데이터를 가진 데이터베이스의 구조를 뜻합니다.
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에 관계된다는 것을 장고에 알려줍니다.
아래의 코드가 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