대규모 Django 프로젝트를 위한 프로젝트 설계 및 파일 시스템 레이아웃
대규모 Django 프로젝트를 위한 프로젝트 설계 및 파일 시스템 레이아웃
프로젝트 설계
Django 프로젝트를 위한 일반적인 프로젝트 설계에는 다음과 같은 몇 가지 주요 구성 요소가 포함됩니다.
- 루트 프로젝트 디렉토리: 이 디렉토리는 프로젝트의 모든 주요 구성 요소를 포함합니다. 일반적으로
project_name
이라는 이름을 갖습니다. - 앱 디렉토리: 각 앱은 자체 디렉토리를 가져야 합니다. 앱 디렉토리는 models.py, views.py, urls.py와 같은 앱 관련 모든 파일을 포함해야 합니다.
- 설정 파일: 프로젝트 설정은 settings.py 파일에 저장됩니다. 이 파일에는 데이터베이스 연결 정보, 정적 파일 위치, 기타 프로젝트 설정이 포함됩니다.
- 미디어 파일: 이미지, 스크립트 및 기타 정적 파일은 프로젝트의 media 디렉토리에 저장되어야 합니다.
- 정적 파일: CSS, JavaScript 및 기타 정적 파일은 프로젝트의 static 디렉토리에 저장되어야 합니다.
파일 시스템 레이아웃
다음은 Django 프로젝트를 위한 일반적인 파일 시스템 레이아웃의 예입니다.
project_name/
├── manage.py
├── project_name/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── apps/
│ ├── app1/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations/
│ │ │ └── ...
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ └── app2/
│ ├── ...
└── media/
└── static/
이 레이아웃은 프로젝트의 주요 구성 요소를 잘 정리하고 분리하는 데 도움이 됩니다. 앱 디렉토리를 사용하면 각 앱을 별도의 모듈로 개발하고 유지 관리할 수 있습니다. media 및 static 디렉토리는 프로젝트의 정적 파일을 효과적으로 저장하는 데 사용할 수 있습니다.
팁
- 프로젝트가 커질수록 하위 디렉토리를 사용하여 코드를 더욱 구성하는 것이 좋습니다.
- 버전 관리 시스템(예: Git)을 사용하여 프로젝트 코드를 추적하십시오.
- 자동화 도구를 사용하여 테스트를 실행하고 코드를 배포하십시오.
Django 프로젝트 예제 코드
project_name/settings.py
# ...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
# ...
from django.urls import path, include
urlpatterns = [
path('admin/', include('django.contrib.admin.urls')),
path('', include('blog.urls')),
]
apps/blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
path('post/new/', views.post_new, name='post_new'),
]
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=255)
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
body = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
from django.shortcuts import render, get_object_or_404
from .models import Post
def post_list(request):
posts = Post.objects.all().order_by('-created_at')
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})
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == 'POST':
form = PostForm(request.POST, instance=post)
if form.is_valid():
form.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'blog/post_edit.html', {'form': form})
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_new.html', {'form': form})
apps/blog/templates/blog/post_list.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>블로그 게시물 목록</title>
</head>
<body>
<h1>블로그 게시물 목록</h1>
<ul>
{% for post in posts %}
<li>
<a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>{{ post.title }}</title>
</head>
<body>
<h1>{{ post.title }}</h1>
<p>{{ post.author }}</p>
<p>{{ post.body }}</p>
</body>
</html>
대규모 Django 프로젝트를 위한 대체 설계 및 파일 시스템 레이아웃
앱 구성
- 하위 앱 사용: 하나의 큰 앱 대신 여러 개의 작은 앱으로 프로젝트를 구성할 수 있습니다. 이렇게 하면 코드를 더욱 모듈화하고 관리하기 쉬워집니다.
- 패키지 사용: 앱을 더욱 구성하려면 앱 내에서 패키지를 사용할 수 있습니다. 이렇게 하면 코드를 논리적 그룹으로 나눌 수 있습니다.
- PROJECT_ROOT/src 레이아웃: 일부 개발자는 프로젝트의 모든 소스 코드를 PROJECT_ROOT/src 디렉토리에 저장하는 것을 선호합니다. 이렇게 하면 모든 코드가 한 위치에 있으므로 찾기 쉽습니다.
- 내장 앱 레이아웃: Django 1.8부터 프로젝트 내에서 앱을 별도의 디렉토리에 저장하지 않고 프로젝트의 루트 디렉토리에 직접 저장할 수 있습니다. 이것은 더 간단한 프로젝트에 적합할 수 있습니다.
기타 고려 사항
- 버전 관리 시스템 사용: Git 또는 Mercurial과 같은 버전 관리 시스템을 사용하여 프로젝트 코드를 추적하는 것이 중요합니다.
- 테스트 작성: 코드를 작성할 때 테스트를 작성하십시오. 이렇게 하면 코드가 예상대로 작동하는지 확인하는 데 도움이 됩니다.
- 자동화 도구 사용: 코드를 자동으로 테스트하고 배포하는 데 도움이 되는 자동화 도구를 사용하십시오.
python django