Django 项目结构解析

🏗️ 项目结构的重要性

良好的项目结构是成功Django应用的基础。合理的组织可以提高代码的可维护性、可扩展性和团队协作效率。

Django 项目架构概述

一个典型的Django项目包含多个层次,从项目配置到应用模块,每个部分都有其特定的职责:

项目配置

settings.py, urls.py

应用模块

models.py, views.py

模板和静态文件

templates/, static/

Django遵循MTV(Model-Template-View)架构模式

Django 项目层次结构

项目层

全局配置和设置

应用层

功能模块和业务逻辑

资源层

模板、静态文件和媒体文件

标准项目结构

使用django-admin startproject创建的标准项目结构:

myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
wsgi.py
asgi.py

核心文件详解

⚙️
manage.py

项目命令行工具

用于执行各种Django管理命令,如运行服务器、创建迁移、执行测试等。

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
  try:
    from django.core.management import execute_from_command_line
  except ImportError as exc:
    raise ImportError(# ...错误处理...)
  execute_from_command_line(sys.argv)
🔧
settings.py

项目配置文件

包含所有项目设置:数据库配置、应用列表、中间件、模板、静态文件等。

# 项目根目录
BASE_DIR = Path(__file__).resolve().parent.parent

# 安全密钥
SECRET_KEY = 'your-secret-key'

# 调试模式
DEBUG = True

# 应用列表
INSTALLED_APPS = [# ...应用列表...]
🛣️
urls.py

URL路由配置

定义项目的URL模式,将URL映射到相应的视图函数。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
  path('admin/', admin.site.urls),
  path('blog/', include('blog.urls')),
  path('', include('pages.urls')),
]
🌐
wsgi.py & asgi.py

Web服务器接口

WSGI/ASGI兼容的Web服务器入口点,用于部署项目到生产环境。

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

application = get_wsgi_application()

应用结构解析

📦 应用的角色

Django应用是项目的功能模块,每个应用应该专注于一个特定的功能领域。

使用python manage.py startapp blog创建的典型应用结构:

blog/
__init__.py
admin.py
apps.py
models.py
views.py
tests.py
urls.py
migrations/
__init__.py
0001_initial.py
templates/
blog/
index.html
detail.html
static/
blog/
css/
js/
images/
models.py

定义数据模型和数据库结构

views.py

处理业务逻辑和HTTP请求

urls.py

定义应用的URL路由

admin.py

注册模型到Django管理后台

tests.py

编写应用测试用例

apps.py

应用配置和元数据

模板和静态文件结构

🎨 模板文件组织

模板文件应该按照应用进行组织,避免命名冲突。

templates/
base/
base.html
header.html
footer.html
blog/
index.html
detail.html
post_form.html
users/
login.html
register.html
profile.html
🎯 静态文件组织

静态文件(CSS、JavaScript、图片)应该按类型和应用分类。

static/
css/
bootstrap.min.css
style.css
js/
jquery.min.js
main.js
images/
logo.png
background.jpg
blog/
blog.css
blog.js
📁 媒体文件组织

用户上传的文件应该妥善组织,避免混乱。

media/
avatars/
user1.jpg
user2.png
documents/
report.pdf
manual.docx
blog/
post1_image.jpg
post2_image.png

项目组织模式

📚
单应用模式

小型项目,所有功能在一个应用中

project/
├── app/
│ ├── models.py
│ ├── views.py
│ └── ...
🏢
多应用模式

中型项目,功能分解到多个应用

project/
├── users/
├── blog/
├── shop/
└── core/
🌉
微服务模式

大型项目,多个Django项目协同

auth-service/
blog-service/
shop-service/
api-gateway/

实际项目示例

📝 博客平台项目结构

一个完整的博客平台项目组织示例:

blog_platform/
manage.py
requirements.txt
.env.example
blog_platform/
__init__.py
settings/
urls.py
wsgi.py
apps/
users/
posts/
comments/
core/
templates/
static/
media/
docs/
tests/

配置管理最佳实践

环境配置分离

1
分离 settings.py

为不同环境创建不同的配置文件:

settings/
├── __init__.py
├── base.py
├── development.py
├── production.py
└── testing.py
2
使用环境变量

敏感信息通过环境变量管理:

import os

SECRET_KEY = os.environ.get('SECRET_KEY')
DEBUG = os.environ.get('DEBUG', False)
DATABASE_URL = os.environ.get('DATABASE_URL')
3
使用 python-decouple

简化环境变量管理:

from decouple import config

SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)

部署相关文件

🚀 生产环境部署文件

为生产环境准备的必要文件和配置。

deployment/
Dockerfile
docker-compose.yml
nginx.conf
gunicorn.conf.py
requirements.txt
runtime.txt
Procfile
.env.example
.gitignore
requirements.txt

项目依赖包列表:

Django==4.2.0
psycopg2-binary==2.9.5
gunicorn==20.1.0
python-decouple==3.6
whitenoise==6.2.0
Dockerfile

容器化部署配置:

# 使用官方Python运行时
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .
RUN pip install -r requirements.txt

# 复制项目代码
COPY . .

# 运行应用
CMD ["gunicorn", "myproject.wsgi:application"]

项目结构最佳实践

📁
逻辑分组

按功能将应用分组到apps目录

🔧
配置分离

为不同环境创建单独的配置文件

📝
文档完整

包含README和项目文档

🧪
测试组织

为测试创建专门的目录结构

🔒
安全配置

敏感信息通过环境变量管理

🚀
部署就绪

包含部署配置和说明

✅ 好的结构
  • 清晰的目录命名
  • 按功能模块组织
  • 配置与环境分离
  • 完整的文档
  • 测试代码组织良好
❌ 不好的结构
  • 所有文件在根目录
  • 混合的功能模块
  • 硬编码的配置
  • 缺少文档
  • 测试文件混乱

交互式项目探索器

🔍 探索项目结构

点击项目文件查看详细说明和示例代码:

myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
wsgi.py
blog/
models.py
views.py
urls.py
选择文件查看详情

点击左侧的文件或目录查看详细说明和示例代码。

// 文件内容将在这里显示

下一步学习

👁️
视图和URL

学习如何创建视图和配置URL路由

学习视图
🎨
模板系统

掌握Django模板语言和模板继承

学习模板
🔐
用户认证

学习Django内置的用户认证系统

学习认证