Django 기초 | Python 풀스택 웹 프레임워크 시작하기
이 글의 핵심
Django 기초에 대한 실전 가이드입니다. Python 풀스택 웹 프레임워크 시작하기 등을 예제와 함께 상세히 설명합니다.
들어가며
”배터리 포함 웹 프레임워크”
Django는 인증, ORM, Admin 등 모든 것이 포함된 풀스택 프레임워크입니다.
1. Django 시작하기
설치 및 프로젝트 생성
startproject는 웹 사이트 전체를 감쌀 큰 상자를 만들고, startapp은 그 안에 기능 단위(예: 블로그, 결제) 모듈을 하나씩 추가하는 과정입니다. 이후 models.py는 DB 테이블 모양을, views.py는 요청 처리 순서를, templates는 화면 HTML을 담당합니다.
# Django 설치
pip install django
# 프로젝트 생성
django-admin startproject myproject
cd myproject
# 앱 생성
python manage.py startapp blog
# 개발 서버 실행
python manage.py runserver
프로젝트 구조
myproject/
├── myproject/
│ ├── __init__.py
│ ├── settings.py # 설정
│ ├── urls.py # URL 라우팅
│ └── wsgi.py
├── blog/
│ ├── models.py # 모델 (데이터)
│ ├── views.py # 뷰 (로직)
│ ├── urls.py
│ └── templates/ # 템플릿 (화면)
└── manage.py
2. 모델 (Model)
모델 정의
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
class Meta:
ordering = ['-created_at']
마이그레이션
# 마이그레이션 파일 생성
python manage.py makemigrations
# 데이터베이스에 적용
python manage.py migrate
3. 뷰 (View)
함수 기반 뷰
# blog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
클래스 기반 뷰
from django.views.generic import ListView, DetailView
from .models import Post
class PostListView(ListView):
model = Post
template_name = 'blog/post_list.html'
context_object_name = 'posts'
paginate_by = 10
class PostDetailView(DetailView):
model = Post
template_name = 'blog/post_detail.html'
4. URL 라우팅
URL 패턴
# blog/urls.py
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
]
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
5. 템플릿
템플릿 작성
<!-- templates/blog/post_list.html -->
<!DOCTYPE html>
<html>
<head>
<title>블로그</title>
</head>
<body>
<h1>블로그 포스트</h1>
{% for post in posts %}
<article>
<h2>
<a href="{% url 'blog:post_detail' post.pk %}">
{{ post.title }}
</a>
</h2>
<p>{{ post.content|truncatewords:30 }}</p>
<small>{{ post.created_at|date:"Y-m-d H:i" }}</small>
</article>
{% empty %}
<p>포스트가 없습니다.</p>
{% endfor %}
</body>
</html>
6. Admin 사이트
Admin 등록
# blog/admin.py
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'author', 'created_at']
list_filter = ['created_at', 'author']
search_fields = ['title', 'content']
date_hierarchy = 'created_at'
슈퍼유저 생성
python manage.py createsuperuser
# Username: admin
# Email: [email protected]
# Password: ****
# http://localhost:8000/admin/ 접속
7. 실전 예제
간단한 블로그
# blog/views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .models import Post
def create_post(request):
if request.method == 'POST':
title = request.POST.get('title')
content = request.POST.get('content')
author = request.POST.get('author')
Post.objects.create(
title=title,
content=content,
author=author
)
messages.success(request, '포스트가 생성되었습니다!')
return redirect('blog:post_list')
return render(request, 'blog/create_post.html')
정리
핵심 요약
- Django: 풀스택 웹 프레임워크
- MVT: Model, View, Template
- ORM: Python 코드로 DB 조작
- Admin: 자동 관리자 페이지
- 마이그레이션: 데이터베이스 스키마 관리
다음 단계
- REST API 설계
- 데이터베이스 연동
관련 글
- Flask 기초 | Python 웹 프레임워크 시작하기