1. Setting.py 데이터베이스 확인
'''
mysite/settings.py
'''
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
1-1. 관련된 명령어
# 데이터베이스에 변경 필요 사항 추출
python manage.py makemigrations
# 데이터베이스에 변경사항 반영
python manage.py migrate
1-2. DBdb.sqlite3
2. TimeZone 설정
'''
mysite/settings.py
'''
TIME_ZONE = 'Asia/Seoul'
3. 언어 설정
LANGUAGE_CODE = 'ko-kr'
4. INSTALLED_APPS 확인
'''
mysite/settings.py
'''
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
django.contrib.admin | 관리용 사이트 |
django.contrib.auth | 인증 시스템 |
django.contrib.contenttypes | 컨텐츠 타입을 위한 프레임워크 |
django.contrib.sessions | 세션 프레임워크 |
django.contrib.messages | 메세징 프레임워크 |
django.contrib.staticfiles | 정적 파일을 관리하는 프레임워크 |
5. 모델 생성
'''
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)
CharField>
문자(character) 필드
DateTimeField>
날짜와 시간(datetime) 필드
각 필드는 데이터베이스에서는 컬럼명으로 사용
필수 인수>
CharField 의 경우 max_length
선택적 인수>
default 로 하여금 votes 의 기본값을 0 으로 설정
ForeignKey(관계설정)>
다-대-일(many-to-one), 다-대-다(many-to-many), 일-대-일(one-to-one)
6. Class PollsConfig 확인
'''
polls/apps.py
'''
from django.apps import AppConfig
class PollsConfig(AppConfig):
name = 'polls'
7. polls 앱 활성화
경로는 . 으로 구분한다.
polls.apps.PollsConfig => polls\apps.py\class PollsConfig
'''
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',
]
8. makemigrations
models.py에서 적용한 변경사항이나 추가된 혹은 삭제된 사항들을 감지하여 파일로 생성한다.
py manage.py makemigrations polls
9. SQL 확인
py manage.py sqlmigrate polls 0001
BEGIN;
--
-- Create model Question
--
CREATE TABLE "polls_question" (
"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" (
"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;
- 사용하는 데이터베이스에 따라서 출력결과는 다를 수 있습니다.
위의 출력결과는 PostgreSQL에서 생성되었습니다.
- 테이블 이름은 앱의 이름과 모델의 이름(소문자)이 조합되어 자동으로 생성됩니다.
이 경우, 앱의 이름인 polls 와 소문자로 표기된 모델의 이름인 question 과 choice가 합쳐집니다.
(이 동작을 재지정(override)하여 수정할 수 있습니다.)
- 기본 키(ID)가 자동으로 추가됩니다. (역시 이 동작도 재지정할 수 있습니다.)
- 관례에 따라, Django는 외래 키 필드명에 "_id" 이름을 자동으로 추가합니다. (물론 이것도 재지정할 수 있습니다.)
- 외래 키 관계는 FOREIGN KEY 제약 조건에 의해 명시됩니다.
DEFERRABLE 부품에 대해 걱정하지 마십시오.
트랜잭션이 끝날 때까지 외래 키를 적용하지 않도록 PostgreSQL에 지시합니다.
- 사용하는 데이터베이스에 따라, 데이터베이스 고유의 필드타입이 조정됩니다.
따라서, 자동 증가 필드를 생성할 경우
``auto_increment``(MySQL), ``serial``(PostgreSQL), ``integer primary key autoincrement``(SQLite)와 같이 사용하는
데이터베이스에 따라 적절한 필드타입이 자동으로 선택됩니다.
필드 명에 사용되는 인용부호도 상황에 따라 겹따옴표나 홑따옴표가 적절히 선택됩니다.
- sqlmigrate 명령은 실제로 데이터베이스에서 마이그레이션을 실행하지 않습니다.
대신 SQL Django가 필요하다고 생각하는 것을 볼 수 있도록 화면에 인쇄합니다.
Django가 수행 할 작업을 확인하거나 변경을 위해 SQL 스크립트가 필요한 데이터베이스 관리자가 있는지
확인하는 데 유용합니다.
10. migrate
적용되지 않은 migrations들을(설정값들을) 적용
py manage.py migrate
11. Python Shell
Django에서 동작하는 모든 명령을 대화식 Python 쉘에서 그대로 테스트 가능
py manage.py shell
# 방금 작성한 모델 클래스를 가져옵니다.
from polls.models import Choice, Question
# 아직 시스템에 질문이 없습니다.
Question.objects.all()
# 새 질문을 작성하십시오.
# 기본 설정 파일에서 시간대 지원이 활성화되어 있으므로
# Django는 pub_date에 tzinfo를 사용하여 날짜 시간을 예상합니다.
# timezone.now () 사용
# datetime.datetime.now () 대신 #을 사용하면 올바른 작업을 수행합니다.
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
# 오브젝트를 데이터베이스에 저장하십시오. save ()를 명시 적으로 호출해야합니다.
q.save()
# 이제 ID가 있습니다.
q.id
# Python 속성을 통해 모델 필드 값에 액세스하십시오.
q.question_text
q.pub_date
# 속성을 변경 한 후 save ()를 호출하여 값을 변경하십시오.
q.question_text = "What's up?"
q.save()
# objects.all ()은 데이터베이스의 모든 질문을 표시합니다
Question.objects.all()
'Python_WEB > Django_Tutorial' 카테고리의 다른 글
[Django]Survey WEB Application Tutorial 5 (0) | 2020.04.30 |
---|---|
[Django]'polls" is not a registered namespace Error (0) | 2020.04.29 |
[Django]Survey WEB Application Tutorial 4 (0) | 2020.04.29 |
[Django]Survey WEB Application Tutorial 3 (0) | 2020.04.29 |
[Django]Survey WEB Application Tutorial 1 (0) | 2020.04.29 |