Django 기초 | Python 풀스택 웹 프레임워크 시작하기

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')

정리

핵심 요약

  1. Django: 풀스택 웹 프레임워크
  2. MVT: Model, View, Template
  3. ORM: Python 코드로 DB 조작
  4. Admin: 자동 관리자 페이지
  5. 마이그레이션: 데이터베이스 스키마 관리

다음 단계

  • REST API 설계
  • 데이터베이스 연동

관련 글

  • Flask 기초 | Python 웹 프레임워크 시작하기