첫 번째 장고 앱 작성하기, part 2
DB 설치하기
Django는 기본적으로 SQLite를 사용하도록 구성 되어 있다. 기본 제공 데이터베이스고 나중에 실 프로젝트 할때는 좀 더 확장석 있는 데이터 베이스를 사용하는 것이 좋다.DB바인딩
후 DATABASES default항목값 ENGINE, NAME 등 키 값 성정하기.DATABASES
SQLite는 DB파일이 필요할 때마다 자동생성되나 타 DB는 DB 생성 따로 해줄 것.
- my-site/settings.py에서 TIME_ZONE값 설정 할 것.
- 기본값은 USE_TZ이므로 검색해가서 수동설정할 것.
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
세팅창 기본제공 App들이 있는데 다음과 같음.
- admin : 관리용 사이트
- auth : 인증 시스템
- contenttypes : 컨텐츠 타입을 위한 프레임워크
- sessions : 세션 프레임워크
- messages : 메세징 프레임워크
- staticfiles : 정적 파일을 관리하는 프레임워크
- polls줄은 앱을 현재 프로젝트에 포함시키겠다는 구문.
# settings.py의 DB설정과 마이그레이션에 따라 DB테이블을 자동생성해준다.
python manage.py migrate
# SHOW TABLES;.schemaSELECT TABLE_NAME FROM USER_TABLES;
모델 만들기
- 모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)
- DB의 필드와 동작을 포함한다.
- DRY원칙에 따른 정규화를 추구한다.
- 객체생성
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
# 객체 표현을 위한 str
def __str__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
# 관계설정을 위한
# 각각의 Choice가 하나의 Question에 대응.
# CASCADE는 계산식 삭제 형식.
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
- DB의 각 필드는 Field클래스의 인스턴스로 표현됨.
- CharField 는 문자필드(필수인수max_length), DateTimeField는 날짜와 시간 필드.
- 이는 Django에게 각 필드가 어떤 자료형을 가질것인지를 선언함.
- 기계가 읽기 좋은 형식과 사람이 읽기좋은 형식에 대해 공부해보기.
- Foreign Key
모델 활성화
$ python manage.py makemigrations polls
로 CREATE TABLE함.
migration은 Django가 모델과 DB스키마에 대한 변경사항을 저장하는 방법.
migrations에 저장된느 파일이고 수동으로 조정할 수 있음.
migrate와 sqlmigrate 명령에 대해 공부해보기
python manage.py sqlmigrate polls 0001
을 통해 가상으로 DB migration을 화면에 인쇄해줌.
python manage.py migrate
아직 적용되지 않은 마이그레이션을 모두 수집해 이를 실행함
- 장고는
django_migrations
테이블을 두어 migtation적용 여부를 추적함. - 모델에서의 변경사항들과 DB스키마의 동기화가 이루어짐.
- 동작중인 DB를 자료 손실없이 업데이트하는데 최적화 된 강력한 기능.
- 3가지 절차를 기억
- models.py에서 모델 변경
- python manage.py makemigrations를 통해 변경사항에 대한 migration생성
- python manage.py migrate 를 통해 변경사항을 데이터베이스에 적용
- 만드는 명령과 적용하는 명령이 분리된 것은 버전관리 시스템에 migration을 커밋할 수 있도록 하기 위함.(개발의 용이성을 위함)
API 다루기
python manage.py shell
- manage.py에서 세팅을 다룸.
- 쿼리만들기
관리자 생성
python manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password: **********
Password (again): *********
- http://127.0.0.1:8000/admin/ 으로 관리화면 접근
- admin.py에서 괸리 인덱스를 추가시킬 수 있음.
from django.contrib import admin
from .models import Question
admin.site.register(Question)
- CRUD의 수행이 가능.
'backend > Django&Python' 카테고리의 다른 글
[Django] Views templates 사용해보기(generic views) (0) | 2021.08.26 |
---|---|
[Django] View단 연결하기 (0) | 2021.08.25 |
[Django] 프로젝트 생성하기, View, URLconf 만들기. (0) | 2021.08.24 |
[Error] django-admin 못찾을 때 (0) | 2021.08.23 |
[Python] 파이썬의 메모리 관리 : Garbage Collections (3) | 2021.08.19 |