데이터베이스를 이용하여 웹페이지에 입력한 정보들을 저장해보자.
- ORM
- 필드 종류와 옵션
- makemigrations와 migrate
- DB 적용 확인하기
데이터베이스에 명령을 내리지 않아도 파이썬의 객체지향적인 방법으로 DB의 데이터들을 생성, 수정, 삭제 등을 할 수 있다.
오로지 파이썬만으로 웹 어플리케이션을 만들 수 있는 것이다.
ORM을 쓰기위해 드디어 models.py
를 건드리게 될 것이다.
ex. Blog 테이블 (행 : row, 열 : column)
ID | 제목 | 본문 | 생성날짜 | 글쓴이 |
---|---|---|---|---|
1 | 글 제목1 | 글 본문 1 | 작성 날짜1 | 글 쓴 사람1 |
2 | 글 제목2 | 글 본문 2 | 작성 날짜2 | 글 쓴 사람2 |
... | ... | ... | ... | ... |
class Blog:
ID = 숫자
제목 = 문자
본문 = 문자
생성날짜 = 날짜
글쓴이 = 문자
from django.db import models
# Create your models here.
# 데이터베이스에 만들 테이블의 이름과 같아야 함
class Blog(models.Model): # models의 Model 클래스를 상속받을 것임
# 테이블의 column 만들기
title = models.CharField(max_length=200)
writer = models.CharField(max_length=100)
pub_date = models.DateTimeField()
body = models.TextField() # 제한이 없는 textfield
def __str__(self): # 객체가 호출이 됐을 때 나오는 이름표 같은 녀석
return self.title
또는 아래와 같이 하나만 가져와서 디테일 페이지를 구현할 것인지 선택하면 된다.
models.py
에 클래스가 만들어졌다고 해서 바로 데이터베이스에 테이블이 생성되지 않음
-> 명령어를 통해 만들어주어야 함.
python manage.py makemigrations
makemigrations
: 앱 내의 migration 폴더를 만들어서 models.py
의 변경사항을 저장
-> 쉽게 생각해보면 데이터베이스에 테이블을 만들어준다고 생각할 수 있겠다.
makemigrations
명령어 이후 아래와 같이 나온다면 성공!
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Blog
아래 명령어를 통해 변경 사항들을 DB에 바로 적용
python manage.py migrate
migrate
: migration 폴더를 실행시켜 데이터베이스에 적용
migrate
명령어 이후 아래와 같이 나온다면 성공!
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying blog.0001_initial... OK
Applying sessions.0001_initial... OK
ID 칼럼을 지정해주지 않는 이유는??
models.Model
에 ID 값이 이미 정의가 되어있기 때문이다.(어떻게 DB에 적용되어있는지 알 수 있나?)
-> Django는 admin 패널을 제공해주기 때문에 타 웹 프레임워크 보다 더 쉽게 DB를 들여다 볼 수 있음.
python manage.py createsuperuser
-> app내의 admin.py에 들어간다.
-> 우리가 models.py에 Blog
를 등록했다는 사실을 알려주어야 한다.
from .models import Blog
admin.site.register(Blog)
-> blog 생성 완료 -> Server를 켠 후 127.~~/admin에 들어가기
-> superuser login 하기 -> ADD BLOG +
버튼 클릭
DateTimeField에서 시간을 설정해 줄 때, now를 클릭하더라도 지금 현재시간과 약 9시간 정도가 차이가 나는 모습을 볼 수 있다.
이것을 현재시각과 맞춰주기 위해서는 project 폴더내의 settings.py에 들어가서
다음과 같이 TIME_ZONE
에 대한 내용을 'UTC'
에서 'Asia/Seoul'
바꿔주면 된다!
TIME_ZONE = 'Asia/Seoul'
admin 패널을 보게 되면 데이터를 저장할 때마다 blog object(1)
이라고 되어있는 걸 볼 수 있다.
이를 제목으로 바꿔주기 위해서는 models.py
에서 해당 클래스 내부에 아래의 코드를 작성하여 주면 된다.
from django.db import models
# Create your models here.
# 데이터베이스에 만들 테이블의 이름과 같아야 함
class Blog(models.Model): # models의 Model 클래스를 상속받을 것임
# 테이블의 column 만들기
title = models.CharField(max_length=200)
writer = models.CharField(max_length=100)
pub_date = models.DateTimeField()
body = models.TextField() # 제한이 없는 textfield
def __str__(self): # 객체가 호출이 됐을 때 나오는 이름표 같은 녀석
return self.title