第一个 Django 应用(App):从创建到运行的完整实践指南 Django 应用(App)是构建可扩展、可维护 Web 项目的核心模块化单元。一个 Django 项目由一个或多个职责清晰、功能内聚的应用组成,每个应用封装特定业务领域(如用户管理、博客系统、商品目录),实现高内聚、低耦合的工程实践。掌握应用的创建、注册、组织与协同机制,是深入 Django 开发体系的首要关键路径。 什么是 Django 应用(App)? Django 应用是对传统“单体代码库”开发模式的根本性重构。它将庞杂的 Web 功能拆解为可独立开发、测试、部署与复用的逻辑单元,显著提升团队协作效率与系统长期可维护性。
Django 应用(App)是构建可扩展、可维护 Web 项目的核心模块化单元。一个 Django 项目由一个或多个职责清晰、功能内聚的应用组成,每个应用封装特定业务领域(如用户管理、博客系统、商品目录),实现高内聚、低耦合的工程实践。掌握应用的创建、注册、组织与协同机制,是深入 Django 开发体系的首要关键路径。
Django 应用是对传统“单体代码库”开发模式的根本性重构。它将庞杂的 Web 功能拆解为可独立开发、测试、部署与复用的逻辑单元,显著提升团队协作效率与系统长期可维护性。
users 管理身份认证,blog 处理内容发布,api 提供数据接口。django-allauth、django-rest-framework)。models.py、views.py、admin.py 等),统一团队开发范式,降低认知成本。INSTALLED_APPS 显式声明依赖,应用间通过信号(Signals)、中间件(Middleware)或服务层(Service Layer)通信,避免硬编码耦合。Django 项目是顶层容器,应用是功能构件。一个项目可包含多个应用,一个应用亦可被多个项目复用。
Django 提供 startapp 命令快速生成符合规范的应用骨架,确保初始结构完整、零配置错误。
django-admin startproject mysite 创建 Django 项目;manage.py 文件)。python manage.py startapp my_app
✅ 提示:若使用虚拟环境管理工具(如
pipenv或poetry),请确保在激活环境中执行:pipenv run python manage.py startapp my_app
执行后,自动生成 my_app/ 目录,结构如下:
my_app/ ├── __init__.py ├── admin.py ├── apps.py ├── migrations/ │ └── __init__.py ├── models.py ├── tests.py └── views.py
| 文件/目录 | 作用说明 |
|---|---|
__init__.py |
标识 my_app 为 Python 包,支持模块导入(如 from my_app import views)。 |
admin.py |
注册模型至 Django 管理后台,启用图形化数据操作界面。 |
apps.py |
定义应用配置类(MyAppConfig),可覆盖默认应用名称与行为。 |
migrations/ |
存放数据库迁移脚本,记录模型变更历史,实现 python manage.py migrate 自动同步。 |
models.py |
定义数据模型(ORM 类),映射数据库表结构,是业务数据的核心抽象。 |
tests.py |
编写单元测试与集成测试,保障代码质量与重构安全性。 |
views.py |
实现业务逻辑处理函数(视图),接收请求、调用模型、返回响应(HTML/JSON 等)。 |
创建应用后,必须在项目配置中显式声明,Django 才能识别并加载其组件。
settings.py在 INSTALLED_APPS 列表末尾添加应用标识符:
# mysite/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'my_app', # 新增:注册自定义应用 ]
⚠️ 关键细节:
- 应用名必须为字符串,且与应用目录名完全一致(区分大小写);
- 推荐将自定义应用置于内置应用之后,避免覆盖默认行为;
- 若应用位于子包中(如
apps.my_app),需使用完整路径'apps.my_app'。
INSTALLED_APPS 的核心作用models.py、admin.py、apps.py 等模块;manage.py 命令提供上下文(如 makemigrations 仅作用于已注册应用);collectstatic)与模板加载路径。验证应用是否正确注册的最直接方式:编写一个视图并成功响应 HTTP 请求。
编辑 my_app/views.py:
# my_app/views.py from django.http import HttpResponse def home(request): return HttpResponse("Hello, Django App! This is my first Django application.")
在 my_app/ 目录下新建 urls.py:
# my_app/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.home, name='home'), ]
✅ 命名规范:
name='home'为 URL 模式赋予唯一标识,支持模板中{% url 'home' %}反向解析,避免硬编码路径。
编辑项目根目录 urls.py(通常为 mysite/urls.py):
# mysite/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('my_app.urls')), # 将根路径委托给 my_app 处理 ]
✅ 路由委托机制:
include()将请求路径前缀(此处为空字符串)后的剩余路径交由my_app.urls解析,实现路由分层。
python manage.py runserver
访问 http://localhost:8000/,浏览器将显示:
Hello, Django App! This is my first Django application.
超越基础创建,理解应用设计哲学是构建生产级系统的基石。
blog(仅处理文章 CRUD)、users(仅处理认证与资料)、payments(仅处理支付逻辑)core(功能泛化)、utils(逻辑混杂)、everything(违背模块化本质)models.py)、视图(views.py)、表单(forms.py)、模板(templates/my_app/)紧密协作;post_save 触发跨应用事件(如用户注册后发送欢迎邮件);my_app/services.py 中封装跨应用业务逻辑,视图仅调用服务;requests 调用其他应用提供的 REST 接口(适用于微服务架构)。settings.MY_APP_FEATURE_ENABLED),便于项目定制;models.py 中直接导入其他应用模型;若需关联,使用字符串引用 'other_app.ModelName';apps.py 中定义 default_auto_field 与 verbose_name,提升开箱体验。INSTALLED_APPS 中移除应用名即可停用,Django 自动忽略其所有组件;python manage.py migrate my_app zero 回滚迁移,再删除应用目录;min_django_version。本章系统阐述了 Django 应用的创建、注册、路由与工程实践,核心价值在于建立一套可持续演进的模块化架构:
INSTALLED_APPS 是应用生命周期的总控开关,赋予项目动态组装能力;include() 机制使 URL 设计与应用边界严格对齐,支撑大规模项目拆分;下一步进阶:在后续章节中,将基于
my_app应用,深入实现数据模型定义(models.py)、数据库迁移(makemigrations/migrate)、管理后台定制(admin.py)、模板渲染(templates/)与表单处理(forms.py),逐步构建功能完备的 Web 应用模块。