TIL

내일배움캠프 본캠프 33일차 - DJANGO 프로젝트 워크플로우

수현조 2025. 1. 10. 21:22

Django 프로젝트 워크플로우

1. URL 설정

urls.py에서 앱별로 URL을 분리합니다.

# config/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),  # Admin 페이지
    path('accounts/', include('accounts.urls')),  # Accounts 앱 URL
    path('blog/', include('blog.urls')),  # Blog 앱 URL
]

2. 앱 등록

Django 설정 파일인 settings.py에서 앱을 등록합니다.

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    # 기타 기본 앱들 ...
    'accounts',  # Accounts 앱
    'blog',  # Blog 앱
]

3. 사용자 정의 모델 (Accounts 앱)

settings.py에서 사용자 정의 모델을 등록합니다.

# settings.py
AUTH_USER_MODEL = 'accounts.User'

문제 발생 시 확인

  • 모델 클래스 이름이 정확히 '앱이름.모델이름' 형식인지 확인하세요.

4. 데이터베이스 마이그레이션

  1. 데이터베이스 반영 준비:
    python manage.py makemigrations
    
  2. 데이터베이스 적용:
    python manage.py migrate
    

5. Blog 앱의 모델 생성

blog/models.py에서 게시글 데이터를 다룰 모델을 정의합니다.

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

6. Admin 등록

관리자 페이지에서 데이터 확인 및 관리를 위해 admin.py에 모델을 등록합니다.

# blog/admin.py
from django.contrib import admin
from .models import Post

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    pass

7. URL과 View 연결

URL 패턴을 정의하고, View 함수로 연결합니다.

# blog/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),  # 게시글 목록
    path('post_new/', views.post_new, name='post_new'),  # 새 게시글 작성
]

8. View 로직 작성

views.py에서 데이터를 처리하고 템플릿을 렌더링합니다.

# blog/views.py
from django.shortcuts import render
from .models import Post
from .forms import PostForm

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts})

def post_new(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect('post_list')
    else:
        form = PostForm()
    return render(request, 'blog/post_form.html', {'form': form})

9. Forms 생성

폼 클래스는 모델 데이터를 입력받거나 검증할 때 사용됩니다.

# blog/forms.py
from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']  # 사용자로부터 입력받을 필드

10. 템플릿 작성

HTML 템플릿을 만들어 사용자 인터페이스를 제공합니다.

<!-- blog/templates/blog/post_list.html -->
<h1>게시글 목록</h1>
<ul>
    {% for post in posts %}
    <li>{{ post.title }} - {{ post.created_at }}</li>
    {% endfor %}
</ul>
<a href="{% url 'post_new' %}">새 글 작성</a>

중요한 개념 정리

  1. URL → View → Template:
    Django의 기본 요청-응답 사이클은 URL과 View를 통해 데이터를 처리하고, 템플릿을 렌더링하여 사용자에게 보여주는 방식입니다.
  2. Model:
    데이터베이스와의 상호작용을 담당합니다. 테이블의 구조를 정의하고 ORM을 통해 데이터를 처리합니다.
  3. Form:
    데이터 입력, 검증, 저장의 과정을 쉽게 만들어주는 도구입니다.
  4. Admin:
    관리자 페이지를 통해 데이터를 관리할 수 있습니다