django-admin startproject <프로젝트이름>
: 프로젝트 파일 생성
터미널에 프로젝트 파일 내로 진입 후,
python manage.py startapp <앱이름>
: 앱 파일 생성
그리고 바로,
python manage.py runserver
를 입력하면
127.0.0.1:8000이라는 로컬호스트가 작동된다.
이제 polls라는 설문조사 앱을 만들어 볼 예정이다, 그전에 polls디렉토리의 views.py
에 함수를 넣고 로컬웹이 작동이 되는지 확인해보자.
index()
함수를 통해 "Hello, world."라는 response를 client에게 전달해본다.
polls.views.py
from django.http import HttpResponse
이거 잊지말고 넣자... 안 그럼 polls.views의 index()함수를 불러들일 수 없다.
Hello 문구를 연동하기 위해선 먼저 polls 디렉토리에 urls.py
라는 URLConfi부터 생성해주고 이와 같은 코드를 입력해야 한다.
polls.urls.py
polls의 urls.py
는 views.py
를 호출하기 위해 최상위 URLconf(=mysite의 urls.py
)에서 polls 앱폴더에 있는 polls.urls(=polls의 urls.py
) 모듈로 연결해주기 위함이다.
polls의 urls.py
를 만드는 이유는,
최상위 URLconf(=mysite의 urls.py
)에서 polls 디렉토리에 있는 urls.py
(=polls.url) 모듈로 연결시켜서 views.py
를 호출하기 위함이다.
include()
함수는 다른 URLconf들을 참조할 수 있도록 도와준다.
polls 앱에 그 자체의 URLconf(polls/urls.py)가 존재하는 한, 《/polls/》, 또는 《/fun_polls/》, 《/content/polls/》와 같은 경로, 또는 그 어떤 다른 root 경로에 연결하더라도, 앱은 여전히 잘 동작한다.
예를 들어, 127.0.0.1/polls/라는 url에 진입했을 때, 해당 url를 pathing해서 polls/라는 해당 path를 잡아내서 polls.urls로 연결해주는 것.
polls에서 전달 받으면 urlpatterns안에 path내에서 views.index(즉, view.py
)로 연결해주는 것.
settings.py
DATABASES로 사용자가 어떤 database를 사용할지 변경 가능하다.
database들의 종류들은 예로 sqlite3, mysql, oracl 등이 있다.
INSTALLED_APPS는 각각의 앱들이 있다.
앱마다 각각의 기능이 있으며 django에게 이러한 기능을 사용하겠다고 말해줄 수 있다.
이 어플리케이션들은 기본으로 제공된다.
이러한 기본 어플리케이션들 중 몇몇은 최소한 하나 이상의 데이터베이스 테이블을 사용하는데, 그러기 위해서는 데이터베이스에서 테이블을 미리 만들어야 된다.
테이터 베이스들을 생성하기 위해선 터미널에python manage.py migrate
migrate
명령은INSTALLED_APPS
의 설정을 탐색하여,mysite_new.settings.py
의 데이터베이스 설정과 app 과 함께 제공되는 데이터베이스 migrations에 따라, 필요한 데이터베이스 테이블을 생성한다. 이 명령을 수행하면 각 migration 이 적용되는 메세지가 화면에 출력된다. 어떤 내용이 생성되었는지 궁금하면, 데이터베이스 클라이언트로 접속한 후,
- PostgreSQL: \dt
- MySQL: SHOW TABLES;
- SQLite: .schema
- Oracle: SELECT TABLE_NAME FROM USER_TABLES;
을 통해 Django 가 생성한 테이블을 확인해 볼 수 있다.
모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)를 말한다.
Django는 데이터베이스를 만들 때 직접 쿼리문을 작성하지 않는다. ORM이라는 방식을 사용하여 파이썬으로 데이터 작업을 해주게 하는 기능이다.
지금 만들고 있는 설문조사 앱에는 Question과 Choice라는 모델을 만든다.
Question과 Question에 대한 Choice(선택지),
Question에는 question과 publication date
Choice에는 choice와 vote.
polls.models.py
CharField
: 문자의 길이
DateTimeField
: 시간 타입
IntegerField
: 숫자 타입
ForeignKey
: 각각의 Choice가 하나의 Question에 관계된다는 것을 Django에게 알려줌. Choice가 Question이라는 데이터모델을 참조함.
(하나의 Question에 여러 Choice가 있음으로 1:다)
CASCADE
튜토리얼에 경우, 설문조사 앱을 적용하기 위해 'polls.apps.PollsConfig'
를 추가한다.
polls의 apps.py에 있는 PollsConfig 파일을 등록한 것이다.
즉, Django에 polls앱을 포함한다는 뜻이된다.
polls.apps.py
python manage.py makemigrations polls
migration
이라는 장소에다가 작성한 모델들을 데이터베이스 내에 테이블을 생성할 수 있도록 설계도를 만드는 작업이다.
migrations안에 0001_initial.py가 생성됨.
아래와 같이 0001_initial.py 파일에 데이터베이스 내의 테이블을 생성하기 위한 설계도가 자동으로 만들어진다.
polls.migrations.0001.inital.py
이제 다시 python manage.py migrate
를 입력해서 데이터베이스 내의 실제 테이블을 생성하는 작업을 수행한다.
그러면 아래 사진처럼 polls가 추가된것이 보인다.
Python manage.py sqlmigrate polls 0001
명령을 통해서 나의 migration들을 실행시켜주고, 자동으로 데이터베이스 스키마를 관리해주게 된다.
실제 DB에는 sql 쿼리로 명령이 전달이 된다. migration 파일은 쿼리는 아니다. 따라서 sqlmigrate 명령을 통해 sql로도 확인해야 한다.
마지막으로, python manage.py migrate
을 해주어 등록된 앱에 있는 모델을 참조하여 실제 테이블을 생성한다.