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. 데이터베이스 마이그레이션
- 데이터베이스 반영 준비:
python manage.py makemigrations
- 데이터베이스 적용:
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>
중요한 개념 정리
- URL → View → Template:
Django의 기본 요청-응답 사이클은 URL과 View를 통해 데이터를 처리하고, 템플릿을 렌더링하여 사용자에게 보여주는 방식입니다. - Model:
데이터베이스와의 상호작용을 담당합니다. 테이블의 구조를 정의하고 ORM을 통해 데이터를 처리합니다. - Form:
데이터 입력, 검증, 저장의 과정을 쉽게 만들어주는 도구입니다. - Admin:
관리자 페이지를 통해 데이터를 관리할 수 있습니다