Server/Django project 1 - shopping mall

3. Django model 구성 (데이터의 정의)

개발자킹콩 2020. 9. 16. 03:14

model 구성 (데이터의 정의)

사용자 관리를 위한 데이터 정의
상품 관리를 위한 데이터정의

Users를 관리하기 위해 필요한 데이터들을 DB(데이터베이스)에 넣겠다는 의미이다.

verbose_name : 지칭하는 닉네임이라고 보면 된다.

CharField : 최대길이를 지정해 주어야 한다.

TextField, EmailField : CharField와 다르게 max_length(최대길이)를 지정할 필요 없다.

DateTimeField : auto_now_add를 통해 현재 시간으로 자동 추가가 가능하다

def __str__(self) : 해당 클래스의 객체는 self.email로 반환됨을 의미한다.

class Meta : 해당 데이터들이 묶여있는 table과 admin 페이지에 있는 닉네임을 지정한 것이다.

_plural : 복수형을 의미하며, 사실 데이터가 늘어나면 복수형이 되기에 밑의 이름으로 지정된다.

 

사용자가 상품을 주문할 때의 관리를 위한 데이터 정의

ForeignKey는 데이터를 외부에 존재하는 키를 이용함을 의미한다.

'app name. class name'  특정 앱의 특정 클래스를 사용한다는 의미이고

ForeignKey의 경우 반드시 지정해주어야 할 속성이 존재한다. 바로 on_delete이다

on_delete=models.CASCADE : 데이터는 경우에 따라 수정되기도 삭제되기도 한다.

이때의 데이터를 관리하는 정책이 필요하다. 이 경우는 해당 Key가 삭제되면

그 Key에 해당하는 데이터를 지우도록 설정한 것이다.

 


장고에서는 데이터를 정의했으면 DB의 구조를 짜고 그 구조로부터 DB를 생성하는 것을 쉽게 하도록 이루어져 있다.

 

1. 우선 아래의 그림과 같이 settings.py에서 해당 부분을 찾아서 app name을 등록해준다.

2. $ python manage.py makemigrations

실행되면 model이 생성되고 각 app에 존재하는 migrations에 0001_initial.py가 생성된다.

django는 여기서 이 파일을 참고하여 "필드가 이런 것이 있고 어떤 구조로 되어있는지를 파악하고 해당 파일을 기반으로 DB를 생성해야겠군"라고 인지한다.

 

3. $ python manage.py migrate

명령줄이 실행되면 해당 프로젝트 안에 db.sqlite3 파일이 생성된다.

 

이 파일은 settings.py에 설정되어 있으며 데이터베이스는 sqlite 엔진을 사용하고,

DB파일은 db.sqlite3이다. 이 파일의 경우 settings.py에 설정이 되어있다.

DATABASES = {

     'default': {

          'ENGINE': 'django.db.backends.sqlite3',

          'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

     }

}

os.path.join(BASE_DIR, 'db.sqlite3') --> 현재 디렉터리에 있는 db.sqlite3라는 뜻이다.

이 DB파일을 사용해서 원하는 테이블들이 생성이 되는 것이다.

app_setting에 앱 등록이 안 돼있으면 DB는 생성이 안되기에 주의하자!!!

 

 

이제 DB가 잘 만들어졌는지 확인해보자

$ sudo apt-get install sqlite3

$ sqlite3 db.sqlite3

sqlite > .table                     --> table들이 출력된다.

sqlite > .schema shop_user    --> 해당 table이 어떤 구조로 만들어져 있는지 출력된다.

sqlite > .q                          --> 종료한다.

여기서 필드가 변경이 생길 경우 makemigrations와 migrate로 변경사항을 DB에 반영하도록 한다.

 

 

 

이상! 오늘도 감코!