-
[4월 4주차-4/22]📝 Django로 블로그 만들기 – 글/댓글/썸네일까지Why Not SW CAMP 5기/수업 기록 2025. 4. 22. 14:15
오늘은 Django를 활용해 간단한 블로그 웹사이트를 만드는 방법을 배웠습니다. 글과 댓글을 작성하고, 썸네일 이미지까지 등록할 수 있는 기능을 구현했어요. 하나씩 단계별로 정리해볼게요!
1️⃣ Django 프로젝트 시작
📦 가상환경에서 Django 설치
pip install 'django<5'
※ Django 5는 아직 일부 패키지와 호환되지 않기 때문에 <5로 설치합니다.
🛠 새 프로젝트 생성
django-admin startproject config .
현재 디렉토리에 config라는 이름으로 프로젝트가 생성됩니다.
2️⃣ 템플릿 설정
settings.py에서 템플릿 경로를 명시해줍니다.
TEMPLATES_DIR = BASE_DIR / "templates" TEMPLATES = [ { ... 'DIRS': [TEMPLATES_DIR], ... }, ]
3️⃣ 블로그 앱 생성
python manage.py startapp blog
그리고 settings.py의 INSTALLED_APPS에 "blog" 추가하는 것도 잊지 마세요.
4️⃣ 모델 작성: 글과 댓글
blog/models.py
from django.db import models class Post(models.Model): title = models.CharField("포스트 제목", max_length=100) content = models.TextField("포스트 내용") thumbnail = models.ImageField("썸네일 이미지", upload_to="post", blank=True) def __str__(self): return self.title class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE) content = models.TextField("댓글 내용") def __str__(self): return f"{self.post.title}의 댓글 (ID: {self.id})"
💾 마이그레이션
python manage.py makemigrations python manage.py migrate
5️⃣ 관리자 페이지 설정
관리자 페이지에서 글과 댓글을 관리할 수 있도록 등록합니다.
blog/admin.py
from django.contrib import admin from blog.models import Post, Comment @admin.register(Post) class PostAdmin(admin.ModelAdmin): pass @admin.register(Comment) class CommentAdmin(admin.ModelAdmin): pass
👤 슈퍼유저 생성
python manage.py createsuperuser
6️⃣ 이미지 처리 준비
글에 이미지(썸네일)를 업로드하려면 Pillow 패키지가 필요합니다.
pip install 'Pillow<10'
7️⃣ 뷰 구현 (글 목록, 상세, 작성)
blog/views.py
from django.shortcuts import render, redirect from blog.models import Post, Comment def post_list(request): posts = Post.objects.all() return render(request, "post_list.html", {"posts": posts}) def post_detail(request, post_id): post = Post.objects.get(id=post_id) if request.method == "POST": comment_content = request.POST["comment"] Comment.objects.create(post=post, content=comment_content) return render(request, "post_detail.html", {"post": post}) def post_add(request): if request.method == "POST": title = request.POST["title"] content = request.POST["content"] thumbnail = request.FILES["thumbnail"] post = Post.objects.create(title=title, content=content, thumbnail=thumbnail) return redirect(f"/posts/{post.id}/") return render(request, "post_add.html")
8️⃣ URL 연결
config/urls.py
from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import path from blog.views import post_list, post_detail, post_add from config.views import index urlpatterns = [ path('admin/', admin.site.urls), path("", index), path("posts/", post_list), path("posts/<int:post_id>/", post_detail), path("posts/add/", post_add), ] urlpatterns += static( prefix=settings.MEDIA_URL, document_root=settings.MEDIA_ROOT, )
※ MEDIA_URL, MEDIA_ROOT는 settings.py에 아래처럼 설정해두어야 합니다:
MEDIA_URL = "/media/" MEDIA_ROOT = BASE_DIR / "media"
✅ 마무리
이렇게 해서 완성된 기능은 다음과 같습니다:
- 블로그 글 목록 조회
- 글 작성 (썸네일 이미지 포함)
- 글 상세 조회 및 댓글 작성
- Django Admin 페이지에서 글/댓글 관리
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[4월 5주차-4/28~29]🎯 Django 블로그 프로젝트 (0) 2025.04.29 [4월 4주차-4/24]RubiBlog: Django + Amazon Lightsail 배포기 (0) 2025.04.24 [4월 4주차-4/21]🍔 Django로 햄버거 검색 웹 만들기 (0) 2025.04.21 [4월 3주차-4/15-16]Node.js & AWS를 활용한 이미지 갤러리 웹사이트 구축기 (0) 2025.04.16 [4월 3주차-4/14]AWS 실무 핵심 개념 총정리 💡 | DynamoDB, Lambda, SDK, CLI 완전 이해 (1) 2025.04.14