모델 (Model)
모델은 사용될 데이터에 대한 정의를 담고 있는 장고의 클래스이다. 데이터베이스를 SQL없이 접근가능하며 데이터베이스 엔진 (MySQL, Oracle, ...)이 변경이 용이하다. 테이터베이스 처리는 ORM 기법을 사용한다. 즉, 테이블을 클래스로 매핑해서 테이블에 대한 CRUD (Create, Read, Update, Delete) 기능을 클래스 객체에 대해 수행하면, 장고가 내부적으로 SQL 처리하여 데이터베이스에 반영해주는 방식이다.
ORM 기법
객체 관계 매핑은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다. 객체 지향 언어에서 사용할 수 있는 "가상" 객체 데이터베이스를 구축하는 방법이다.
장고의 모델 클래스는 하나의 테이블에 매핑되며 속성은 테이블의 컬럼에 매핑된다. 테이블 클래스는 django.db.models.Model 클래스를 상속받아 정의하고 각 클래스 변수의 타입도 장고에서 미리 정의해 놓은 필드 클래스를 사용한다.
Migration
테이블의 신규 생성, 테이블의 정의 변경 등 models.py 파일에서 데이터베이스 변경 사항이 발생하면 이를 데이터베이스에 실제로 반영해 주는 작업이 필요하다. 장고는 마이그레이션이라는 개념을 도입했다. 마이그레이션은 테이블 및 필드의 생성, 삭제, 변경 등과 같이 데이터베이스에 대한 변경 사항을 알려주는 정보이다. 물리적으로 어플리케이션 디렉토리별로 migrations/ 디렉토리 하위에 마이그레이션 파일을 만드는 방향이 좋다. 변경 사항은 makemigrations 및 migrate 명령을 이용하여 데이터베이스에 반영한다.
모델 클래스
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length = 30)
last_name = models.CharField(max_length = 30)
자동으로 생성된 SQL
CREATE TABLE myapp_person(
"id" serial NOT NULL PRIMARY KEY,
"first name" varchar (30) NOT NULL,
"last name" varchar (30) NOT NULL
)
아이디 (id) | 성 (last_name) | 이름 (first_name) |
1 | 김 | 영수 |
2 | 이 | 영희 |
3 | 박 | 지민 |
4 | 최 | 유리 |
5 | 고 | 동욱 |
6 | 임 | 혜림 |
7 | 조 | 세영 |
투표 어플리케이션 만들기
…/polls/models.py을 다음과 같이 프로그래밍한다.
from django.db import models
# Create your models here.
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
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
Admin 설정
admin.py을 다음과 같이 프로그래밍한다.
from django.contrib import admin
from polls.models import Question, Choice
# Register your models here.
admin.site.register(Question)
admin.site.register(Choice)
그 다음, 관리자 계정을 만들기 위해 터미널에서 manage.py이 있는 폴더로 이동하고 다음을 실행한다.
python manage.py createsuperuser
ID : admin
Password : 1234
그리고 서버에서 작동하는지 확인한다. 자동으로 서버가 열리지 않으면 "http://127.0.0.1:8000/"를 브라우저에 직접 입력한다.
python manage.py runserver
'App Programming > Django' 카테고리의 다른 글
[Django] 뷰 (View) (0) | 2023.06.22 |
---|---|
[Django] URL (0) | 2023.06.20 |
[Django] MVT 패턴 (0) | 2023.06.20 |
[Django] 서버 배포 (0) | 2023.04.10 |
[Django] Reverse for '' not found. '' is not a valid view function or pattern name. (0) | 2023.04.09 |