from django.contrib import admin — Django 내장 모듈django.contrib.admin은 Django가 기본 제공하는 자동 관리자 인터페이스(Admin Site) 모듈입니다.
Django 프로젝트를 만들면 /admin URL에서 데이터베이스를 GUI로 관리할 수 있는 페이지가 자동 생성됩니다. 이걸 가능하게 해주는 게 바로 django.contrib.admin입니다.
1. 모델 단순 등록
from django.contrib import admin
from .models import Article
admin.site.register(Article)
2. ModelAdmin으로 커스터마이징
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['id', 'title', 'author', 'created_at'] # 목록에 표시할 필드
list_filter = ['author', 'created_at'] # 오른쪽 필터 패널
search_fields = ['title', 'content'] # 검색창
ordering = ['-created_at'] # 정렬 기준
readonly_fields = ['created_at'] # 읽기 전용 필드
ModelAdmin 옵션 정리| 옵션 | 설명 |
|---|---|
list_display | 목록 페이지에 표시할 컬럼 |
list_filter | 사이드바 필터 |
search_fields | 검색 대상 필드 |
ordering | 기본 정렬 (-는 내림차순) |
readonly_fields | 수정 불가 필드 |
fields | 상세 페이지에 표시할 필드 순서 |
inlines | 관련 모델을 같은 페이지에 표시 |
list_per_page | 페이지당 항목 수 (기본 100) |
settings.py의 INSTALLED_APPS에 반드시 포함되어 있어야 합니다:
INSTALLED_APPS = [
'django.contrib.admin', # ✅ 어드민
'django.contrib.auth', # 인증
'django.contrib.contenttypes',
...
]
urls.py에도 등록:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls), # /admin 접속 경로
]
python manage.py createsuperuser
이후 /admin에 접속하면 등록된 모델을 GUI로 CRUD 할 수 있습니다.
궁금한 부분이 있으면 더 설명해 드릴게요!
데이터를 다루는 4가지 기본 동작의 앞글자를 딴 약자입니다.
| 약자 | 영어 | 한국어 | 예시 |
|---|---|---|---|
| C | Create | 생성 | 게시글 작성 |
| R | Read | 조회 | 게시글 목록 보기 |
| U | Update | 수정 | 게시글 내용 수정 |
| D | Delete | 삭제 | 게시글 삭제 |
admin.py에 register한 모델을 말합니다.
admin.site.register(Article) # Article 모델을 등록
→ 이렇게 등록해야 /admin에서 보입니다.
"브라우저에서
/admin주소로 들어가면,
등록해 놓은 DB 테이블(모델)을
코드 한 줄 없이 화면 클릭만으로
추가 / 조회 / 수정 / 삭제 할 수 있다"
① 브라우저에서 localhost:8000/admin 접속
↓
② 슈퍼유저로 로그인
↓
③ 등록된 모델(예: Article) 클릭
↓
④ 버튼 클릭으로 CRUD 가능
- [추가] 버튼 → Create (생성)
- 목록 확인 → Read (조회)
- 항목 클릭 → Update (수정)
- [삭제] 버튼 → Delete (삭제)
개발자가 별도의 관리 페이지를 만들지 않아도, Django가 자동으로 데이터 관리 화면을 만들어 준다는 뜻입니다! 🎉
그래픽 사용자 인터페이스 — 즉, 마우스로 클릭하고 눈으로 보면서 사용하는 화면입니다.
| CLI | GUI | |
|---|---|---|
| 풀네임 | Command Line Interface | Graphical User Interface |
| 사용 방식 | 명령어 타이핑 | 마우스 클릭 + 시각적 화면 |
| 예시 | 터미널, 명령 프롬프트 | 윈도우 탐색기, 카카오톡, 웹사이트 |
CLI 방식 (명령어로 데이터 조회):
SELECT * FROM article WHERE id = 1;
GUI 방식 (Django Admin):
→ 브라우저에서 /admin 접속하면 아래처럼 버튼, 표, 입력창으로 똑같은 작업을 할 수 있음
┌─────────────────────────────────┐
│ Articles [+추가]│
├────┬──────────┬────────────────┤
│ ID │ 제목 │ 작성자 │
├────┼──────────┼────────────────┤
│ 1 │ 안녕하세요│ admin │
│ 2 │ 테스트 │ user1 │
└────┴──────────┴────────────────┘
CLI = 코드/명령어로 조작
GUI = 눈에 보이는 화면으로 조작
Django Admin이 GUI라는 건, 코드 없이 브라우저에서 클릭만으로 DB를 관리할 수 있다는 뜻입니다! 😊
from django.contrib import admin 설명"Django가 만들어놓은 관리자 페이지 기능을 가져오는 것" 이에요!
from django.contrib import admin
↑ ↑ ↑ ↑
from django contrib admin
가져와 장고에서 내장앱 관리자기능
django
└── contrib ← "contributed(기여하다) apps" 의 약자
├── admin → 관리자 페이지
├── auth → 로그인/인증
├── sessions → 세션 관리
├── messages → 메시지 알림
└── staticfiles → 정적 파일
Django 가 기본으로
제공하는 내장 앱 모음! 📦
→ 설치 없이 바로 사용 가능!
from django.contrib import admin
# 1. 모델 등록
admin.site.register(Study)
# 2. 커스텀 Admin 클래스
class StudyAdmin(admin.ModelAdmin):
list_display = ['title', 'category']
# 3. 데코레이터 방식
@admin.register(Study)
class StudyAdmin(admin.ModelAdmin):
list_display = ['title']
기본 등록 - 아무 설정 없이 그냥 등록
admin.site.register(Study)
→ /admin에서 Study 목록이 기본 형태로만 보임
커스텀 Admin 클래스 - 어떻게 보여줄지 직접 설정
class StudyAdmin(admin.ModelAdmin):
list_display = ['title', 'category']
admin.site.register(Study, StudyAdmin) # ← 둘을 연결
→ /admin에서 Study 목록을 원하는 형태로 보여줌
list_display = ['title', 'category'] 의미/admin의 목록 페이지에 어떤 컬럼을 표시할지 지정하는 옵션입니다.
설정 전
┌─────────────────────┐
│ Study object (1) │ ← 이렇게만 보임
│ Study object (2) │
└─────────────────────┘
설정 후
┌──────────────┬──────────────┐
│ title │ category │ ← 컬럼이 보임
├──────────────┼──────────────┤
│ Django 공부 │ 백엔드 │
│ React 공부 │ 프론트엔드 │
└──────────────┴──────────────┘
admin.ModelAdmin을 상속받아서,
/admin페이지를 내가 원하는 대로 커스터마이징하는 클래스입니다! ✅
@admin.register(Study) 의미함수/클래스 위에 @를 붙여서, 추가 동작을 자동으로 실행시키는 문법입니다.
기존 방식 (2단계)
# ① 클래스 정의
class StudyAdmin(admin.ModelAdmin):
list_display = ['title', 'category']
# ② 따로 등록
admin.site.register(Study, StudyAdmin)
데코레이터 방식 (1단계)
# ① 정의 + 등록을 동시에!
@admin.register(Study)
class StudyAdmin(admin.ModelAdmin):
list_display = ['title', 'category']
@admin.register(Study) 풀이@admin.register(Study) # ← "Study 모델에 아래 클래스를 연결해서 등록해줘"
class StudyAdmin(admin.ModelAdmin):
list_display = ['title', 'category']
| 부분 | 의미 |
|---|---|
@ | 데코레이터 표시 |
admin.register | 등록 동작을 수행하는 함수 |
(Study) | 어떤 모델에 연결할지 지정 |
StudyAdmin | 어드민 설정 클래스 |
@admin.register(Study)=
admin.site.register(Study, StudyAdmin)을
자동으로 실행해주는 축약 문법
코드가 짧아지고, 모델과 설정 클래스가 한눈에 보여서 가독성이 좋아집니다! ✅
http://localhost:8000/admin
┌─────────────────────────┐
│ Django 관리자 페이지 │
├─────────────────────────┤
│ 📋 Study │
│ + 추가 │
│ 📝 목록보기 │
├─────────────────────────┤
│ 👤 Users │
│ 🔑 Groups │
└─────────────────────────┘
# settings.py
INSTALLED_APPS = [
'django.contrib.admin', # ← 여기 등록되어 있어야
'django.contrib.auth',
'django.contrib.sessions',
...
]
# 그래야 admin.py 에서
from django.contrib import admin # 사용 가능! ✅
# 관리자 페이지
from django.contrib import admin
# 로그인/인증
from django.contrib.auth.models import User
# 메시지 알림
from django.contrib import messages
# 로그인 필요 데코레이터
from django.contrib.auth.decorators import login_required
django.contrib
= 스마트폰 기본 앱 📱
설치 없이 처음부터
제공되는 앱들!
admin = 기본 파일관리앱
auth = 기본 잠금화면
sessions = 기본 메모리
messages = 기본 알림
| 코드 | 의미 |
|---|---|
from | 가져와 |
django | Django 패키지에서 |
contrib | 내장 앱 모음에서 |
admin | 관리자 기능을 |
import | 불러옴 |
💡
admin.py파일에서
이 한 줄 없으면 아무것도 못해요!
Django 앱 만들면 자동으로 생성되는필수 import 예요! ✅
from django.db import models — Django 내장 모듈이건 Django가 기본으로 제공하는 내장 모듈입니다.
Django에서 데이터베이스 모델을 정의할 때 사용하는 핵심 모듈이에요.
from django.db import models
class Study(models.Model):
title = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
models 안에 들어있는 주요 내장 기능들models.CharField() # 짧은 문자열
models.TextField() # 긴 문자열
models.IntegerField() # 정수
models.FloatField() # 실수
models.BooleanField() # True/False
models.DateField() # 날짜
models.DateTimeField() # 날짜+시간
models.EmailField() # 이메일
models.ImageField() # 이미지 파일
models.FileField() # 파일
models.ForeignKey() # 1:N 관계
models.ManyToManyField() # N:N 관계
models.OneToOneField() # 1:1 관계
class Study(models.Model): # 이걸 상속받아야 DB 테이블이 됨
...
class Study(models.Model):
class Meta:
ordering = ['-created_at'] # 기본 정렬
db_table = 'my_study' # 테이블 이름 지정
verbose_name = '스터디' # 관리자 페이지 표시명
# DB 모델
from django.db import models
# 뷰
from django.shortcuts import render, redirect, get_object_or_404
# URL
from django.urls import path, include
# 인증
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
# 폼
from django.forms import ModelForm
# 설정
from django.conf import settings
핵심 요약: from django.db import models는 Django가 설치될 때 함께 제공되는 내장 모듈이고, 이걸 통해 Python 클래스를 DB 테이블로 변환할 수 있어요! 🎯