데이터베이스와 Python 클래스 (객체)로 추상화된 형태로 상호작용한다.

urls.py : 사용자 요청의 시작점이다.views.py : 요청을 처리하고 models.py 를 통해 데이터를 다룬다.models.py : 데이터베이스를 정의하고, 데이터베이스와 상호작용한다.templates : views.py 로부터 받은 데이터를 사용자에게 보여줄 화면을 구성한다.DB의 테이블을 정의하고 데이터를 조작할 수 있는 기능들을 제공한다.
ORM : 객체 지향 프로그래밍 언어와 관계형 데이터베이스를 연결해주는 기술이다.생성한 앱에 이미 models.py 가 존재한다. models.py에서 models.Model을 상속받아 정의한다.

class Article(models.Model):
title = models.CharField(max_length=20)
content = models.TextField()
DB 테이블의 필드를 정의하고, 데이터 타입 및 제약 조건을 명시한다.
CharField , TextField
숫자 필드
IntegerField , FloatField
날짜/시간 필드
DateField , TimeField , DateTimeField
파일 관련 필드
FileField , ImageField
null blank default# CharField -> Field types
# max_length -> Field options
title = models.CharField(max_length=10)
model 클래스의 변경사항 (필드 생성, 수정, 삭제 등)을 DB에 최종 반영하는 방법이다.
python manage.py makemigrations

생성된 최종 설계 마이그레이션 파일은 임의적으로 수정하지 말고, makemigrations 명령어를 통해 수정하자
# Generated by Django 5.2.18 on 2026-10-14 01:04
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Article',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=20)),
('content', models.TextField()),
],
),
]
python manage.py migrate


이미 생성된 테이블에 필드를 추가해야한다면
class Article(models.Model):
title = models.CharField(max_length=20)
content = models.TextField()
# 생성일, 수정일 필드 추가
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
makemigrations 명령어 입력명령어를 입력하면 아래와 같은 프롬프트가 나온다.
models.py 에 기본 값 관련 설정
그럼 아래와 같이 프롬프트가 나오는데, 날짜 데이터이기 때문에 아무것도 입력하지 않고 엔터를 누르면 Django가 제안하는 기본 값으로 설정된다.



0001_initial 파일을 의존하면서 생성된다.
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('articles', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='article',
name='create_at',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AddField(
model_name='article',
name='update_at',
field=models.DateTimeField(auto_now=True),
),
]
migrate 명령어 입력 후 테이블 필드 확인
Django가 추가 설치 및 설정 없이 자동으로 제공하는 관리자 인터페이스이다.
데이터 베이스 모델의CRUD작업을 간편하게 수행할 수 있다.
python manage.py createsuperuser
정보 입력

DB에 생성된 admin 계정 확인

관리자 인터페이스 페이지 확인
127.0.0.1:8000/admin

처음 로그인 했을때 아무것도 보이지 않는 것이 정상이다. 우리가 만든 모델을 관리하려면 추가 설정이 필요하다.
admin.py 추가 설정from django.contrib import admin
from .models import Article
# admin 사이트에 우리가 만든 Article 모델 클래스를 등록해야한다.
admin.site.register(Article)


위와 같이 게시글을 작성할 수 있다.
게시글을 작성하고 데이터베이스를 확인해보면

데이터가 들어온 것을 확인할 수 있다!