본문 바로가기

Python_WEB/Django_Tutorial

[Django]Survey WEB Application Tutorial 2

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

< db.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()

 

https://docs.djangoproject.com/ko/3.0/intro/tutorial02/

 

첫 번째 장고 앱 작성하기, part 2 | Django 문서 | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com